我有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/