【问题标题】:Add auto_increment value to table with existing data使用现有数据将 auto_increment 值添加到表中
【发布时间】:2014-01-22 23:51:11
【问题描述】:

我在 phpmyadmin 上有一个包含大约 400 行的表。我添加了一个 id 列,它是主键并且是自动增量。如何使用 sql 更新表并为 id 列中的每一行添加一个值? 我试图用类似的东西来做到这一点

WHILE (SELECT COUNT(*) FROM cong WHERE 'ID' IS NULL) > 0
BEGIN
    SET ROWCOUNT 1
    UPDATE cong SET 'ID' = MAX('ID')+1
END

但返回错误:

 You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'WHILE (SELECT COUNT(*) FROM cong WHERE 'ID' IS NULL) > 0 BEGIN SET ROWCOUN' at line 1

如何实现在每一行添加自增号?

【问题讨论】:

  • 一种方法(也许不是最好的方法),您可以获取现有数据(主表),将数据备份到备份表,然后从主表中删除所有数据。将备份数据重新插入主表,并在插入记录时填充自动增量字段。

标签: sql phpmyadmin


【解决方案1】:

如果我理解正确,您最初没有 id 列,插入了约 400 行,然后决定您需要一个 id 并添加该列,将其设置为主键和 auto_increment。现在您想返回并为之前没有 ID 的约 400 行中的每一行添加值。

当您添加主键和 auto_increment 时,它应该已经为您创建了这些 auto_increment 值。我刚刚对几行数据(单个 varchar 列)进行了测试,然后通过 phpMyAdmin(因为您使用 phpmyadmin 标记了您的帖子)我添加了一个 INT 类型的新列 ID,检查 A_I(auto_increment)复选框并选择 PRIMARY 作为钥匙。浏览数据显示我现有的每行都有一个 ID。

您是说您的列是设置了 auto_increment 的主键并且该字段为空白? MySQL 允许这样做是没有意义的。如果是这样,您可以发布您的表结构吗?

【讨论】:

  • 我删除了列 ID 并重新添加了它,并且每一行都有一个 ID。我一定是错误地将 id 设置为 varchar。谢谢。
  • 太棒了!我很高兴您能够解决它。
猜你喜欢
  • 1970-01-01
  • 2011-06-29
  • 1970-01-01
  • 2015-11-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-09-19
相关资源
最近更新 更多