MySQL FK 错误 1005 - 与 FK 相同的 PK

标签 mysql sql foreign-keys primary-key

我有一个类似的问题: 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/

相关文章:

mysql - 不正确的日期时间值 : '2018-03-00' for column 'created_date' at row 1

mysql - 在更新查询中使用聚合时出现语法错误

c# - 使用 C# 在 Mysql 上出现死锁 - "Lock wait timeout exceeded; try restarting transaction"

foreign-keys - 保存或更新 FK 关系 Sqlalchemy

mysql - 如何通过对同一个表的两个引用来防止内部连接上的名称不明确

php - Yii - 使用事件记录连接多个表

php - 读取和写入 SQL 数据库

mysql - 外键与分区

django - 何时使用 ManyToMany 字段而不是外键?

mysql - 如何提高 COUNT(DISTINCT field1)... GROUP BY field2 的性能?