【问题标题】:There can be only one auto column只能有一个自动列
【发布时间】:2012-01-28 13:47:22
【问题描述】:

如何更正 MySQL 的错误“您只能有一个自动增量列”。

CREATE TABLE book (
   id INT AUTO_INCREMENT NOT NULL,
   accepted_terms BIT(1) NOT NULL,
   accepted_privacy BIT(1) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

【问题讨论】:

    标签: mysql ddl


    【解决方案1】:

    另请注意,“键”不一定表示主键。这样的事情会起作用:

    CREATE TABLE book (
        isbn             BIGINT NOT NULL PRIMARY KEY,
        id               INT    NOT NULL AUTO_INCREMENT,
        accepted_terms   BIT(1) NOT NULL,
        accepted_privacy BIT(1) NOT NULL,
        INDEX(id)
    ) ENGINE=InnoDB DEFAULT CHARSET=latin1;
    

    这是一个人为的例子,可能不是最好的主意,但在某些情况下它可能非常有用。

    【讨论】:

    • 这在我想定义一个复合键以便于更新但我也想有一个自动递增的 ID 用于调试目的的情况下帮助了我。除了可能会稍微慢一点的写入之外,在风险方面我应该注意什么?
    • @Mattias 不,我认为没有任何特别的风险。这是有意支持的,auto 列是纯粹按照惯例(并且为简单起见)的主键。
    • 您也可以使用 UNIQUE 键,或此处列出的任何其他键 - c-sharpcorner.com/UploadFile/65fc13/working-with-keys-in-mysql/…
    【解决方案2】:

    我的 MySQL 说“表定义不正确;只能有一个自动列 并且它必须定义为一个键”所以当我添加如下主键时它开始工作:

    CREATE TABLE book (
       id INT AUTO_INCREMENT NOT NULL,
       accepted_terms BIT(1) NOT NULL,
       accepted_privacy BIT(1) NOT NULL,
       primary key (id)
    ) ENGINE=InnoDB DEFAULT CHARSET=latin1;
    

    【讨论】:

    • 如果列是复合键的一部分,正确的做法是什么?
    • 修改表的语法是什么?
    • @MikeHarrison 看起来你可以把ALTER TABLE book ADD id INT AUTO_INCREMENT NOT NULL, ADD PRIMARY KEY (id);
    【解决方案3】:

    完整的错误信息响起:

    ERROR 1075 (42000):表定义不正确;只能有一个自动列,并且必须定义为一个键

    所以将primary key 添加到auto_increment 字段中:

    CREATE TABLE book (
       id INT AUTO_INCREMENT primary key NOT NULL,
       accepted_terms BIT(1) NOT NULL,
       accepted_privacy BIT(1) NOT NULL
    ) ENGINE=InnoDB DEFAULT CHARSET=latin1;
    

    【讨论】:

      【解决方案4】:
      CREATE TABLE book (
         id INT AUTO_INCREMENT primary key NOT NULL,
         accepted_terms BIT(1) NOT NULL,
         accepted_privacy BIT(1) NOT NULL
      ) ENGINE=InnoDB DEFAULT CHARSET=latin1
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-05-07
        • 2019-05-23
        • 1970-01-01
        • 1970-01-01
        • 2023-03-13
        • 2011-04-17
        • 2019-01-02
        • 2011-08-23
        相关资源
        最近更新 更多