mysql - 在 mysql 表 auto_increment 中创建一个 ID(事后)

标签 mysql primary-key auto-increment

我从另一个开发人员那里获得了一个数据库。他没有在任何表上使用 auto_incrementers。它们都有主键 ID,但他在代码中手动完成了所有递增操作。

我现在可以把它们变成 Auto_incrementers 吗?


哇,非常好,非常感谢。它在我的一张 table 上运行顺利。但是第二张表,我收到此错误...将 '.\DBNAME#sql-6c8_62259c' 重命名为 '.\DBNAME\dealer_master_events' 时出错

最佳答案

例如,这是一个具有主键但不是 AUTO_INCREMENT 的表:

mysql> CREATE TABLE foo (
  id INT NOT NULL,
  PRIMARY KEY (id)
);
mysql> INSERT INTO foo VALUES (1), (2), (5);

您可以MODIFY使用AUTO_INCREMENT选项重新定义该列:

mysql> ALTER TABLE foo MODIFY COLUMN id INT NOT NULL AUTO_INCREMENT;

验证是否生效:

mysql> SHOW CREATE TABLE foo;

输出:

CREATE TABLE foo (
  `id` INT(11) NOT NULL AUTO_INCREMENT,
  PRIMARY KEY (`id`)
) ENGINE=MyISAM AUTO_INCREMENT=6 DEFAULT CHARSET=latin1

请注意,您已就地修改了列定义,而无需创建第二列并删除原始列。 PRIMARY KEY 约束不受影响,您无需在 ALTER TABLE 语句中提及。

接下来您可以测试插入是否生成新值:

mysql> INSERT INTO foo () VALUES (); -- yes this is legal syntax
mysql> SELECT * FROM foo;

输出:

+----+
| id |
+----+
|  1 | 
|  2 | 
|  5 | 
|  6 | 
+----+
4 rows in set (0.00 sec)

我在 Mac OS X 上的 MySQL 5.0.51 上对此进行了测试。

我还使用 ENGINE=InnoDB 和一个依赖表进行了测试。修改 id 列定义不会中断参照完整性。


回复您在评论中提到的错误 150,可能是与外键约束冲突。我很抱歉,在我测试它之后,我认为它会起作用。以下是一些可能有助于诊断问题的链接:

关于mysql - 在 mysql 表 auto_increment 中创建一个 ID(事后),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/251479/

相关文章:

javascript - 为什么我用xmlhttprequest抓取数据时,主键跳动很大?

mysql - Cell中当前Insert的Auto_Increment的使用值

mysql - 如果主键由数据库生成,如何使用 em.merge() 为 jpa 实体插入或更新?

c++ - MySQL 连接器 C++ Linux

Mysql 将列检索为行

sql-server - 什么时候会使用 GUID 作为主键?

mysql - 这样一张表的主键是什么?

sql-server - 主键约束

java - 哪些 Eclipse JavaFX 项目文件要上传到 GitHub

php - mysql插入数据到另一个