我有两张桌子:
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;
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
auto_incremental时,我收到以下错误消息:
错误1075(42000):表定义不正确;只能有一个自动列,必须将其定义为键
数据库必须是InnoDB
引擎。
任何解决方案?
答案 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;