我有一个id
,即主键和自动增量。是否有任何查询可以更新我现有的id
并让我的id
从1开始,下一个ID为2,依旧等等。
例如
id name
3 ABC
5 XYZ
9 PQR
注意: id
已经是主要和自动增量,我不想截断我的ID。
如果可能的话我想得到
id name
1 ABC
2 XYZ
3 PQR
ALTER TABLE table AUTO_INCREMENT = 1;
不是我的解决方案。
由于
答案 0 :(得分:4)
在我看来,你根本不应该搞乱auto_increment列。让他们保持原样。他们唯一的工作是唯一地识别一行。 如果你想要一个好的序列号,可以使用另一列(如果你愿意的话,让它变得独一无二)!
你总是会遇到麻烦,总会发生一些事情,那些混乱你的漂亮的1,2,3 ......序列。交易会回滚吗?繁荣,你的序列是1,2,3,5 ......而不是你想要的1,2,3,4 ...... ......
这也可能是一项非常繁重的操作。 auto_increment列始终也是主键。此表上的每个其他索引都包含主键。每次重置auto_increments时,都会重写此表上的每个索引。
所以我的建议是,不要乱用auto_increments 。
答案 1 :(得分:3)
是否有任何查询更新我现有的ID并让我的ID从1开始,下一个ID 2依旧等等
您可以做的是将表格的内容转移到另一个表格。重置自动增量计数器,将数据重新插入原始表,但让MySQL分配主键。
假设您的表名为mytable
,您可以这样做:
CREATE TABLE mytable_tmp select * from mytable;
TRUNCATE TABLE mytable;
ALTER TABLE mytable AUTO_INCREMENT = 1;
INSERT INTO mytable(name) SELECT name FROM mytable_tmp ORDER BY id;
DROP TABLE mytable_tmp;
答案 2 :(得分:3)
当然有一种方法:
set @counter = 0;
update table_name
set id = (@counter := @counter + 1);
修改强>
为避免重复键出现问题,您可以先运行此类操作,然后暂时将当前ID更改为负等值:
update table_name
set id = 0 - id;
答案 3 :(得分:0)
此查询适用于您的方案:
ALTER TABLE tablename DROP id
ALTER TABLE tablename ADD id INT NOT NULL AUTO_INCREMENT FIRST, ADD PRIMARY KEY (id), AUTO_INCREMENT=1