我有一张5700条记录的表格.主键是整数.现在我注意到缺少一些值.像这样:
100 data
101 data
102 data
104 data
Run Code Online (Sandbox Code Playgroud)
103不见了.如何使秩序成为正确的,我可以更新所有的行(104成为103在我的例子)在一个SQL命令?
MLF*_*MLF 19
试试这个:
SET @var:=0;
UPDATE `table` SET `id`=(@var:=@var+1);
ALTER TABLE `table` AUTO_INCREMENT=1;
Run Code Online (Sandbox Code Playgroud)
Pek*_*ica 10
这样做没有意义.
删除记录中的ID不会故意重复使用 - 例如,确保从其他表到先前删除的记录的引用不会突然指向 错误的记录.尝试改变这一点并不是一个好主意.
如果您想要一个没有漏洞的编号列表,请创建第二int列,在必要时(即删除记录时)在客户端程序中重新排序.
不确定一个命令,但你可以用四个命令完成:
CREATE TABLE `temp` SELECT * FROM `orig_tbl`;
TRUNCATE `orig_tbl`;
-- counter doesn't reset in some old versions
ALTER TABLE `orig_tbl` AUTO_INCREMENT = 1;
-- now we omit primary key column to let it seal the holes
INSERT INTO `orig_tbl` (`col1`, `col2`) SELECT `col1`, `col2` FROM `temp`;
Run Code Online (Sandbox Code Playgroud)
除非你这样做以便更容易随机选择记录,否则你真的应该重新思考你的方法.