Mysql 更改表中某一行的主键(id),并向下移动其他行
我有一个MySQL表,如下所示:Mysql 更改表中某一行的主键(id),并向下移动其他行,mysql,sql,phpmyadmin,Mysql,Sql,Phpmyadmin,我有一个MySQL表,如下所示: 我想更改,使id为15(女性,裙子)的条目现在的主键为8,然后将其他条目的主键移动1,例如,现在的儿童上衣将为9,等等。是否有一种简单的方法通过phpmyadmin或SQL查询来实现这一点?另外,由于id 15已在其他地方用作外键,我希望此更改能反映在其他表中的所有位置。任何人都不应更改主键。此外,将PKs视为非数值可能是有益的。假设您将自动生成的guid用于主键 如果要对项目重新编号,则要更改的列应为单独的数字列,并将其显式地视为排序序号。然后,您可以使用三
我想更改,使id为15(女性,裙子)的条目现在的主键为8,然后将其他条目的主键移动1,例如,现在的儿童上衣将为9,等等。是否有一种简单的方法通过phpmyadmin或SQL查询来实现这一点?另外,由于id 15已在其他地方用作外键,我希望此更改能反映在其他表中的所有位置。任何人都不应更改主键。此外,将PKs视为非数值可能是有益的。假设您将自动生成的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
您不能更改“主键”,这是有充分理由的。其他表可能会使用主键引用特定行。因此,更改在表中不是本地的,它必须在每个引用表中
如果要更改列中的值,则必须首先删除主键约束
如果你真的要做这样的事情,这里有一些注意事项:
关于删除级联
)更改主键,尤其是外键关系中使用的主键,不应掉以轻心。这些键的目的是维护关系完整性。您不应该为键中的空白或缺少顺序而烦恼。如果需要序列号,可以将其添加到另一列。也许应该使用更新级联操作更改子表FK,以便父表上的更改反映在子表上 请参阅MySQL参考以了解FK: 稍后,您可以执行以下操作:
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;
. . 不要更改主键。它被使用的事实强调了为什么你不应该更改它。@GordonLinoff如果我不得不这样做怎么办?
设置外键检查=0;设置外键检查=1代码>