将自动增量主键插入现有表

Fly*_*Cat 147 mysql primary-key

我试图改变一个没有主键和auto_increment列的表.我知道如何添加主键列,但我想知道是否可以自动将数据插入主键列(我已经在DB中有500行并且想要给它们id,但我不想手动执行) .有什么想法吗?非常感谢.

Mic*_*ski 233

ALTER TABLE添加PRIMARY KEY列的语句在我的测试中正常工作:

ALTER TABLE tbl ADD id INT PRIMARY KEY AUTO_INCREMENT;
Run Code Online (Sandbox Code Playgroud)

在为测试目的而创建的临时表上,上面的语句创建了AUTO_INCREMENT id列,并为表中的每个现有行插入了自动增量值,从1开始.

  • 要使它成为第一列,请使用`FIRST`,例如`ALTER TABLE tbl1 ADD id INT PRIMARY KEY AUTO_INCREMENT FIRST;` (50认同)
  • 是的,这是我的经验。永远不要记得必须运行一个单独的脚本来填充 auto_increment ids ... (2认同)
  • 哈哈谢谢。我的错。绿色标记是给你的,因为你的标记更容易实施。:D (2认同)
  • @Nikkie SQLite 的机制完全不同。你会在这里找到建议 http://stackoverflow.com/questions/946011/sqlite-add-primary-key (2认同)
  • @WijaySharma 如果您使用自动增量创建了行并且必须立即通过 id 检索它,MySQL 为该值提供了 LAST_INSERT_ID() 为该值 SELECT * FROM table_name WHERE id = LAST_INSERT_ID() 并且大多数编程语言 API 提供了一些功能/方法在应用程序代码中返回该值。 (2认同)

小智 44

假设您没有像id,no那样的自动增量列,那么您可以使用以下查询添加:

ALTER TABLE table_name ADD id int NOT NULL AUTO_INCREMENT primary key FIRST
Run Code Online (Sandbox Code Playgroud)

如果您是列,则使用以下查询更改为自动增量:

 ALTER TABLE table_name MODIFY column_name datatype(length) AUTO_INCREMENT PRIMARY KEY
Run Code Online (Sandbox Code Playgroud)

  • 最后的“FIRST”有什么作用? (2认同)
  • 它将使新的 `id` 列成为表中的第一个而不是最后一个,这是默认行为。 (2认同)

小智 9

为了使现有主键为auto_increment,您可以使用:

ALTER TABLE table_name MODIFY id INT AUTO_INCREMENT;
Run Code Online (Sandbox Code Playgroud)


ref*_*xiv 6

对于像我这样遇到Multiple primary key defined错误的人,请尝试:

ALTER TABLE `myTable` ADD COLUMN `id` INT AUTO_INCREMENT UNIQUE FIRST NOT NULL;
Run Code Online (Sandbox Code Playgroud)

在 MySQL v5.5.31 上,这将id列设置为我的主键,并用递增值填充每一行。


Gri*_*gor 5

是的,这样的事情可以做到,但可能不是最好的,你可能想要备份

$get_query = mysql_query("SELECT `any_field` FROM `your_table`");

$auto_increment_id = 1;

while($row = mysql_fetch_assoc($get_query))
{
  $update_query = mysql_query("UPDATE `your_table` SET `auto_increment_id`=$auto_increment_id WHERE `any_field` = '".$row['any_field']."'");
  $auto_increment_id++;
}
Run Code Online (Sandbox Code Playgroud)

请注意,any_field更新时您选择的必须相同。