sql >> Databasteknik >  >> RDS >> Mysql

MySQL fixar autoinkrementluckor i två tabeller

ALTER TABLE table2
ADD FOREIGN KEY FK_IMAGE (id_image)
REFERENCES table1 (id_image)
ON DELETE CASCADE
ON UPDATE CASCADE;

SET @currentRow = 0;

UPDATE table1 INNER JOIN (
    SELECT @currentRow := @currentRow + 1 AS id_image_new, id_image AS id_image_old
    FROM table1
    ORDER BY id_image ASC) t on t.id_image_old = table1.id_image
SET table1.id_image = t.id_image_new;

ALTER TABLE table1 AUTO_INCREMENT = 1;

FK kommer automatiskt att uppdatera ID:n för din andra tabell i enlighet med detta.

Jag är inte alls säker, men i vissa äldre versioner av mysql kan en uppdatering av en tabell som du refererar till i en underfråga av uppdateringen krascha. Om så är fallet, skapa bara en andra tabell och fyll i den (infogar), radera sedan den gamla och byt namn på den nya.



  1. Concat det andra kolumnvärdet om det första kolumnvärdet är detsamma

  2. Hur fungerar GROUP BY?

  3. Hur RAND() fungerar i MariaDB

  4. Det går inte att ansluta MySQL-behållare till Tomcat-behållare i docker