您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

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

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

例如,这是一个具有主键但不是的表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 2022/1/1 18:18:36 有568人围观

撰写回答


你尚未登录,登录后可以

和开发者交流问题的细节

关注并接收问题和回答的更新提醒

参与内容的编辑和改进,让解决方法与时俱进

请先登录

推荐问题


联系我
置顶