【问题标题】:ALTER table - adding AUTOINCREMENT in MySQLALTER 表 - 在 MySQL 中添加 AUTOINCREMENT
【发布时间】:2011-10-20 21:43:15
【问题描述】:

我在 MySQL 中创建了一个表,列上为 itemID

创建表后,现在我想将此列更改为AUTOINCREMENT

如何使用 ALTER 语句来做到这一点

表定义:

ALLITEMS (itemid int(10) unsigned, itemname varchar(50))

我正在使用以下代码,但它会引发语法错误

错误:语法不正确

ALTER TABLE allitems
MODIFY itemid INT(10) UNSIGNED AUTOINCREMENT; 

【问题讨论】:

标签: mysql sql alter-table


【解决方案1】:
CREATE TABLE ALLITEMS(
    itemid INT(10)UNSIGNED,
    itemname VARCHAR(50)
);

ALTER TABLE ALLITEMS CHANGE itemid itemid INT(10)AUTO_INCREMENT PRIMARY KEY;

DESC ALLITEMS;

INSERT INTO ALLITEMS(itemname)
VALUES
    ('Apple'),
    ('Orange'),
    ('Banana');

SELECT
    *
FROM
    ALLITEMS;

我之前也对CHANGEMODIFY 关键字感到困惑:

ALTER TABLE ALLITEMS CHANGE itemid itemid INT(10)AUTO_INCREMENT PRIMARY KEY;

ALTER TABLE ALLITEMS MODIFY itemid INT(5);

当我们在那里时,还要注意AUTO_INCREMENT 也可以以预定义的数字开头:

ALTER TABLE tbl AUTO_INCREMENT = 100;

【讨论】:

  • 我已经在 SQL Server 2012 中定义了身份,但我正在尝试将一些值传递给 db。那么在那个地方(自动递增)我需要在 VS 2010 中传递什么??
  • ALTER TABLE ALLITEMS 更改 itemid itemid INT(10)AUTO_INCREMENT 。您不需要指定“主键”。它可能会导致错误:“定义了多个主键”。除此之外,很好的答案!
  • @ThinkCode 何时使用CHANGEMODIFY COLUMN
  • -1;通过不在CHANGE 子句中重新指定UNSIGNED,您将itemid 转换为SIGNED int,从而减少其最大值。
【解决方案2】:

语法:

   ALTER TABLE `table1` CHANGE `itemId` `itemId` INT( 11 ) NOT NULL AUTO_INCREMENT 

但该表需要一个已定义的键(例如 itemId 上的主键)。

【讨论】:

  • itemid 上的ex primary keyprimary key 有什么区别?
【解决方案3】:
ALTER TABLE `ALLITEMS`
    CHANGE COLUMN `itemid` `itemid` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT;

【讨论】:

  • 这应该是公认的答案。很少有人需要使用负(签名)id 列。
【解决方案4】:

将 AUTO_INCREMENT PRIMARY KEY 添加到 OP 的现有表的基本语法:

ALTER TABLE allitems
MODIFY itemid INT(10) UNSIGNED AUTO_INCREMENT PRIMARY KEY;

或者对于一个新表,这里是来自the docs的语法示例:

CREATE TABLE animals (
     id MEDIUMINT NOT NULL AUTO_INCREMENT,
     name CHAR(30) NOT NULL,
     PRIMARY KEY (id)
);

陷阱和注意事项:

  • AUTO_INCREMENT 列上必须有索引。 (通常,您希望它是 PRIMARY KEY,但 MySQL 不要求这样做。)
  • 通常最好将AUTO_INCREMENT 列设为UNSIGNED。从文档:

    如果可能,请使用 UNSIGNED 属性以允许更大的范围。

  • 当使用CHANGEMODIFY 子句创建列AUTO_INCREMENT(或者实际上无论何时您使用CHANGEMODIFY 子句)时,您应该小心包含列的所有修饰符,如 NOT NULLUNSIGNED,当您调用 SHOW CREATE TABLE yourtable 时会显示在表定义中。否则这些修饰符将丢失。

【讨论】:

    【解决方案5】:
    ALTER TABLE allitems
    CHANGE itemid itemid INT(10) AUTO_INCREMENT;
    

    【讨论】:

      【解决方案6】:
      ALTER TABLE tblcatalog
          CHANGE COLUMN id id INT(11) NOT NULL AUTO_INCREMENT FIRST;
      

      【讨论】:

        【解决方案7】:

        ALTER TABLE employees CHANGE id id int AUTO_INCREMENT PRIMARY KEY;

        【讨论】:

          【解决方案8】:
          ALTER TABLE t_name modify c_name INT(10) AUTO_INCREMENT PRIMARY KEY;
          

          【讨论】:

          • 虽然这段代码 sn-p 可以解决问题,including an explanation 确实有助于提高您的帖子质量。请记住,您正在为将来的读者回答问题,而这些人可能不知道您的代码建议的原因。也请尽量不要用解释性 cmets 挤满你的代码,因为这会降低代码和解释的可读性!
          猜你喜欢
          • 1970-01-01
          • 2017-02-26
          • 1970-01-01
          • 2021-10-05
          • 1970-01-01
          • 2019-03-16
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多