我从另一个开发者处获得了一个数据 他没有在任何桌子上使用auto_incrementers.它们都有主键ID,但是他在代码中手动完成了所有增量操作.
我现在可以把它们变成Auto_incrementers吗?
哇,非常好,谢谢你.它在我的一张桌子上毫无障碍地工作.但是第二个表,我收到此错误...将'.\ 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错误1025(HY000):重命名'./foo'时出错(errorno:150)是什么意思?
http://www.simplicidade.org/notes/archives/2008/03/mysql_errno_150.html
以上都没有为我的桌子工作.我有一个带有无符号整数的表作为主键,值为0到31543.目前有超过19000条记录.我必须将列修改为AUTO_INCREMENT
(MODIFY COLUMN
'id' INTEGER UNSIGNED NOT NULL AUTO_INCREMENT
)并AUTO_INCREMENT = 31544
在同一语句中设置seed().
ALTER TABLE `'TableName'` MODIFY COLUMN `'id'` INTEGER UNSIGNED NOT NULL AUTO_INCREMENT, AUTO_INCREMENT = 31544;