当存在auto_inc的外键时,无法创建auto_increment主键

时间:2013-04-29 16:13:36

标签: mysql foreign-keys

我有两张桌子:

  1. INCIDENCIES:

    CREATE TABLE incidencies
      (
         id_inc     INT(7) ZEROFILL NOT NULL auto_increment PRIMARY KEY,
         empresa    VARCHAR(40),
         maquina    VARCHAR(20),
         tipus_inc  VARCHAR(20),
         estat_mon  VARCHAR(20),
         estat_inc  VARCHAR(20),
         dia_inc    DATE,
         hora_inc   TIME,
         descripcio VARCHAR(200)
      )
    CHARACTER SET utf8
    engine=innodb;
    
  2. COMENTARIS:

    CREATE TABLE comentaris
      (
         id_inc    INT(7) ZEROFILL NOT NULL,
         id_com    INT(3) ZEROFILL NOT NULL auto_increment,
         data_com  DATE,
         hora_com  TIME,
         comentari VARCHAR(999),
         PRIMARY KEY(id_inc, id_com),
         FOREIGN KEY (id_inc) REFERENCES incidencies (id_inc) ON DELETE CASCADE ON
         UPDATE CASCADE
      )
    CHARACTER SET utf8
    engine=innodb; 
    
  3. 如您所见,在COMENTARIS表上,ID_INC是一个外键,其原点是auto_incremental,但不再是COMENTARIS

    现在我想让字段ID_COM auto_incremental,并使它们成为主键。

    表格应如下所示:

    ID_INC | ID_COM
    001    |  001
    001    |  002
    001    |  003
    002    |  004
    003    |  005
    

    问题是,似乎MySQL检测到ID_INC为auto_incremental字段,COMENTARIS表上的

    当我尝试使ID_COM auto_incremental时,我收到以下错误消息:

      

    错误1075(42000):表定义不正确;只能有一个自动列,必须将其定义为键

    数据库必须是InnoDB引擎。

    任何解决方案?

1 个答案:

答案 0 :(得分:0)

该问题与外键无关。如果这是您运行的所有代码:

CREATE TABLE comentaris
(
    id_inc    INT(7) ZEROFILL NOT NULL,
    id_com    INT(3) ZEROFILL NOT NULL auto_increment,
    PRIMARY KEY(id_inc, id_com)
)
engine=innodb; 

......你仍然会得到同样的错误。

为了能够在AUTO_INCREMENT上使用id_com,您需要拥有一个密钥,其中id_com是第一项或唯一项。到目前为止,您只有id_com第二项的主键 - 这还不够,因为MySQL无法将此索引用于此目的。

我的印象是你有一个错字,你真的想要这个:

CREATE TABLE comentaris
(
    id_inc    INT(7) ZEROFILL NOT NULL,
    id_com    INT(3) ZEROFILL NOT NULL auto_increment,
    PRIMARY KEY(id_com)
)
engine=innodb;