我有一个类似的问题: How to create foreign key that is also a primary key in MySQL?
但是我的架构似乎与答案匹配,但仍然返回错误“ERROR 1005 (HY000): Can't create table (errno:150)”
CREATE TABLE po_items (
job_id CHAR(3) NOT NULL,
po_id CHAR(3) NOT NULL,
item_id CHAR(3) NOT NULL,
quantity SMALLINT,
PRIMARY KEY (job_id, po_id, item_id),
FOREIGN KEY (job_id, po_id) REFERENCES pos(job_id, po_id)
) ENGINE = INNODB;
CREATE TABLE items (
item_id CHAR(3) NOT NULL,
descr CHAR(10),
on_hand SMALLINT,
price DECIMAL(5,2),
PRIMARY KEY (item_id),
FOREIGN KEY (item_id) REFERENCES po_items(item_id)
) ENGINE = INNODB;
提前致谢
最佳答案
要定义外键
,引用的字段必须已建立索引。
根据有关外键
约束的文档:
REFERENCES tbl_name (index_col_name,...)
在表 po_items
中的 item_id
上定义一个 INDEX
,它应该可以工作。
CREATE TABLE po_items (
job_id CHAR(3) NOT NULL,
po_id CHAR(3) NOT NULL,
item_id CHAR(3) NOT NULL,
quantity SMALLINT,
KEY (item_id),
PRIMARY KEY (job_id, po_id, item_id),
FOREIGN KEY (job_id, po_id) REFERENCES pos(job_id, po_id)
) ENGINE = INNODB;
引用:
[CONSTRAINT [symbol]] FOREIGN KEY
[index_name] (index_col_name, ...)
REFERENCES tbl_name (index_col_name,...)
[ON DELETE reference_option]
[ON UPDATE reference_option]reference_option:
RESTRICT | CASCADE | SET NULL | NO ACTION
关于MySQL FK 错误 1005 - 与 FK 相同的 PK,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22778345/