MYSQL:外键错误

标签 mysql

我在添加外键时遇到一些外键错误。我有:

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/

相关文章:

mysql - 在同一查询中从借方列减去贷方?

php - 通过php在mysql中错误的参数计数错误

mysql - 从一个表中选择行,仅连接另一个表的一行

php - 通过 AJAX Post 使用 UTF-8 发送表情符号

MySQL,如果子查询为空,则优雅地中止?

mysql - 在 Apache Solr 中索引 MySQL

mysql - 在查询中计算适当的总数?

php - 搜索印地语内容时出现 MYSQL 错误

MySQL 错误 :1215 Foreign Key

php文件字​​符编码、mysql数据库字符编码、特殊字符