【发布时间】:2011-12-20 19:40:52
【问题描述】:
我有一个包含 20,000 行数据的表,我导入了该表,但我忘记在其上放置主键,以便每一行都有一个唯一键。
我希望第一行从 ID 1 开始并一直递增到最后一行并在 ID 20000 处结束。如何使用单个查询更新所有行?
我正在使用 MySQL。曾尝试使用 PhpMyAdmin,但它不会这样做。
【问题讨论】:
标签: mysql sql database indexing auto-increment
我有一个包含 20,000 行数据的表,我导入了该表,但我忘记在其上放置主键,以便每一行都有一个唯一键。
我希望第一行从 ID 1 开始并一直递增到最后一行并在 ID 20000 处结束。如何使用单个查询更新所有行?
我正在使用 MySQL。曾尝试使用 PhpMyAdmin,但它不会这样做。
【问题讨论】:
标签: mysql sql database indexing auto-increment
添加新的 ID 列后(暂时不要设置为主键,也不要开启自动递增)运行:
SET @index = 1;
UPDATE tablename SET ID = (@index:=@index+1);
这会将一个从 1 开始递增的 ID 值设置到您现有的每一行,从而解决您在输入数据后尝试插入新的主键列时会遇到的重复键问题。
完成此操作后,您可以将 ID 列设置为具有自动增量的主键。
【讨论】:
更改tablename 并运行以下 SQL 语句。它将创建一个名为 id 的新主键,并从第一行作为 1 开始填充它。
ALTER TABLE `tablename` ADD COLUMN id INT(10) AUTO_INCREMENT NOT NULL FIRST, ADD PRIMARY KEY (id);
【讨论】: