mysql 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,这可能与外键约束冲突。我道歉,在测试之后,我认为它会起作用。这里有一些链接可能有助于诊断问题:

2020-05-17

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值