我在添加外键时遇到一些外键错误。我有:
CREATE TABLE PRODUCT_1( PROD_ID NUMERIC(5) NOT NULL PRIMARY KEY,
PROD_NAME CHAR(20),
PROD_DESC CHAR(20),
PROD_PRICE NUMERIC(20),
SIZE_ID NUMERIC(5) NOT NULL,
PROD_CAT_ID CHAR(5));
CREATE TABLE SIZE(
SIZE_ID NUMERIC(5) NOT NULL PRIMARY KEY,
SIZE_SMALL CHAR(2),
SIZE_MEDIUM CHAR(2),
SIZE_LARGE CHAR(2));
我正在尝试使用以下方式添加外键:
更改表大小 添加外键 (SIZE_ID) 引用 PRODUCT_1(SIZE_ID)
但我收到以下错误: 错误 1005 (HY000): 无法创建表 './mmmm/#sql-842_33e1.frm' (errno: 150)
但是,如果我反过来说:
更改表 PRODUCT_1 添加外键(SIZE_ID)引用SIZE(SIZE_ID)
这工作正常,我无法向其中添加任何数据,它会给出“无法更新子表”之类的错误。
感谢任何帮助!
最佳答案
这是正确的。 SIZE_ID 是 PRODUCT_1 中的“外键”,因为它是 SIZE 表的“主键”。尝试向 SIZE 添加外键约束没有任何意义。
如果运行 SHOW INNODB STATUS,您将得到一些信息,表明您没有所需的索引,但是,从逻辑上讲,没有理由尝试创建该约束。
但是,您确实想要对 PRODUCT_1 创建约束。此时,您将只能在 PRODUCT_1 中输入 SIZE 中已存在的 SIZE_ID 值,因为这是典型的“查找表”设计。
关于MYSQL:外键错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13614150/