我从另一个开发人员那里获得了一个数据库。他没有在任何表上使用auto_incrementers。它们都有主键ID,但是他用代码手动完成了所有增量操作。
我现在可以把它们变成自动增量器吗?
哇,非常好,非常感谢。我的一张桌子工作顺利。但是在第二张表中,我收到此错误…将’。\ DBNAME#sql-6c8_62259c’重命名为’。\ DBNAME \ dealer_master_events’时出错
例如,这是一个具有主键但不是的表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选项将该列重新定义:
MODIFY
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声明。
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列定义不会中断引用完整性。
ENGINE=InnoDB
id
为了响应您在注释中提到的错误150,这可能与外键约束冲突。我道歉,在测试之后,我认为它会起作用。这里有一些链接可能有助于诊断问题: