如何从 1 更新 id 集?
How to update id set from 1?
我有一个 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;
不是我的解决方案。
谢谢
Is there any query to update my existing id and make my id start from 1 and next id 2 and so on
您可以做的是将您 table 的内容传输到另一个 table。重置自动递增计数器,将您的数据重新插入到原始 table 但让 MySQL 分配主键。
假设你的 table 名字是 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;
当然有办法:
set @counter = 0;
update table_name
set id = (@counter := @counter + 1);
编辑
为避免重复键的问题,您可以运行之前像这样将当前 ID 临时更改为负等价物:
update table_name
set id = 0 - id;
此查询适用于您的场景:
ALTER TABLE tablename DROP id
ALTER TABLE tablename ADD id INT NOT NULL AUTO_INCREMENT FIRST, ADD PRIMARY KEY (id), AUTO_INCREMENT=1
在我看来,您根本不应该乱用 auto_increment 列。让他们保持原样。他们唯一的工作就是唯一地标识一行。 如果您想要一个漂亮的序列号,请使用另一列(如果您愿意,请使其独一无二)!
你总是会 运行 惹上麻烦,而且总会发生一些事情,这些事情会打乱你漂亮的 1、2、3... 顺序。事务被回滚?繁荣,你的顺序是 1、2、3、5,... 而不是你想要的 1、2、3、4,...
这也可能是一个非常繁重的操作。 auto_increment 列始终也是主键。此 table 上的每个其他索引都包含主键。每次重置 auto_increment 时,此 table 上的每个索引都会被重写。
所以我的建议是,不要乱用 auto_increments。
我有一个 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;
不是我的解决方案。
谢谢
Is there any query to update my existing id and make my id start from 1 and next id 2 and so on
您可以做的是将您 table 的内容传输到另一个 table。重置自动递增计数器,将您的数据重新插入到原始 table 但让 MySQL 分配主键。
假设你的 table 名字是 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;
当然有办法:
set @counter = 0;
update table_name
set id = (@counter := @counter + 1);
编辑
为避免重复键的问题,您可以运行之前像这样将当前 ID 临时更改为负等价物:
update table_name
set id = 0 - id;
此查询适用于您的场景:
ALTER TABLE tablename DROP id
ALTER TABLE tablename ADD id INT NOT NULL AUTO_INCREMENT FIRST, ADD PRIMARY KEY (id), AUTO_INCREMENT=1
在我看来,您根本不应该乱用 auto_increment 列。让他们保持原样。他们唯一的工作就是唯一地标识一行。 如果您想要一个漂亮的序列号,请使用另一列(如果您愿意,请使其独一无二)!
你总是会 运行 惹上麻烦,而且总会发生一些事情,这些事情会打乱你漂亮的 1、2、3... 顺序。事务被回滚?繁荣,你的顺序是 1、2、3、5,... 而不是你想要的 1、2、3、4,...
这也可能是一个非常繁重的操作。 auto_increment 列始终也是主键。此 table 上的每个其他索引都包含主键。每次重置 auto_increment 时,此 table 上的每个索引都会被重写。
所以我的建议是,不要乱用 auto_increments。