我有2张桌子:


包括:

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;

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;



如您所见,在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自动递增时,出现以下错误消息:


  错误1075(42000):错误的表格定义;只能有一个自动列,并且必须将其定义为键


数据库需要是InnoDB引擎。

有什么办法吗?

最佳答案

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

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;

关于mysql - 当存在一个外键源为auto_inc时,无法创建auto_increment主键,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/16283366/

10-16 16:32
查看更多