1

我有两张桌子:

  1. 事件:

    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. 评论:

    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; 
    

如您所见,在COMENTARIS表上,ID_INC是一个外键,其起源是 auto_incremental,但不再是COMENTARIS.

现在我确实想将字段设为ID_COMauto_incremental,并将它们设为主键。

该表应如下所示:

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

问题是 MySQL 似乎将其检测ID_INC为 auto_incremental 字段,该字段不再存在COMENTARIS表中。

当我尝试制作ID_COMauto_incremental 时,我收到以下错误消息:

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

数据库需要是InnoDB引擎。

有什么解决办法吗?

4

1 回答 1

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_INCREMENTid_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; 
于 2013-04-29T16:57:18.110 回答