【问题标题】:How to change a primary key in SQL to auto_increment?如何将 SQL 中的主键更改为 auto_increment?
【发布时间】:2011-02-11 20:35:37
【问题描述】:

我在 MySQL 中有一个具有主键的表:

mysql> desc gifts;
+---------------+-------------+------+-----+---------+-------+
| Field         | Type        | Null | Key | Default | Extra |
+---------------+-------------+------+-----+---------+-------+
| giftID        | int(11)     | NO   | PRI | NULL    |       |
| name          | varchar(80) | YES  |     | NULL    |       |
| filename      | varchar(80) | YES  |     | NULL    |       |
| effectiveTime | datetime    | YES  |     | NULL    |       |
+---------------+-------------+------+-----+---------+-------+

但我想将其设为 auto_increment。

以下语句失败。如何对其进行修改以使其正常工作?谢谢

mysql> alter table gifts modify giftID int primary key auto_increment;
ERROR 1068 (42000): Multiple primary key defined

【问题讨论】:

    标签: sql mysql primary-key auto-increment alter-table


    【解决方案1】:

    去掉primary key属性:

    ALTER TABLE gifts MODIFY giftID INT AUTO_INCREMENT;
    

    某些列属性,例如PRIMARY KEY,与其说是其他内容的快捷方式,不如说是列的属性。例如,标记为PRIMARY KEY 的列被放置在PRIMARY 索引中。此外,PRIMARY 索引中的所有列都被赋予了NOT NULL 属性。 (顺便说一句:要拥有多列主键,您必须使用单独的约束子句而不是多个PRIMARY KEY 列属性。)由于该列已经在PRIMARY 索引中,您不需要再次指定它当您修改列时。尝试SHOW CREATE TABLE gifts; 看看使用PRIMARY KEY 属性的效果。

    【讨论】:

    • 非常感谢! “ALTER TABLE gift MODIFY giftID AUTO_INCREMENT”似乎需要“INT”——“alter table gift modify giftID int auto_increment;”
    • 在 MySQL 服务器 5.7 上存在使用主键的外键约束时不起作用。我得到“无法更改列 'id':在表 'customers.jobs' 的外键约束 'jobs_ibfk_1' 中使用”
    猜你喜欢
    • 1970-01-01
    • 2012-07-03
    • 2011-01-18
    • 1970-01-01
    • 2013-02-21
    • 2011-10-10
    • 2011-01-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多