我有一个MySQL表格,看起来像这样:
我想要更改这个表格,使得id为15的记录(女装,连衣裙)现在有一个主键为8,然后其他记录都向后移动一位,例如Kids Tops现在将变为9等等。是否有一种简单的方法可以通过phpmyadmin或SQL查询来实现这一点?另外,因为id 15已经被其他表格用作外键,我希望这个更改能够反映在其他表格中。
![enter image description here](https://istack.dev59.com/ALL7U.webp)
永远不应该更改主键。此外,将主键视为非数字值可能是有益的。假设您使用自动生成的GUID作为主键。
如果您想重新编号项目,则要更改的列应该是一个单独的数字列,您明确地将其视为某种序列号。然后,您可以使用三个UPDATE
语句执行所需操作:
update mytable set sequence = -sequence where sequence = 15 -- hide the original 15
update mytable set sequence = sequence+1 where sequence >= 8
update mytable set sequence = 8 where sequence = -15
UPDATE table SET id = -15 WHERE id = 15;
UPDATE table SET id = id + 1 WHERE id >=8;
UPDATE table SET id = 8 WHERE id = -15;
SET foreign_key_checks = 0; <run all the update careful queries>; SET foreign_key_checks = 1;
- E Ciotti