2014-05-06 96 views
0

虽然这是一个重复的问题, 我一直在搜索大部分类似的帖子,但没有发现有用的东西。 这是我的MySQL的SQL脚本。MySQL errno 150没有解决方案

CREATE DATABASE IF NOT EXISTS store; 
USE store; 
CREATE TABLE IF NOT EXISTS Box (
coord VARCHAR (255), 
box_id INT UNSIGNED NOT NULL, 
img_path VARCHAR (256), 
PRIMARY KEY (coord, box_id) 
); 
CREATE TABLE IF NOT EXISTS Tool (
serial VARCHAR (50), 
tool_id INT, 
descr VARCHAR (256), 
box_id INT UNSIGNED NOT NULL, 
tool_state BOOLEAN, 
PRIMARY KEY (tool_id), 
FOREIGN KEY (box_id) REFERENCES Box(box_id) 
); 

输出是:ERROR 1005(HY000)在第9行:无法创建表 'store.Tool'(错误:150) 任何建议

+0

在您的第一个表格中,Box主键由2列组成,但在第二个列中您只使用1列 – StanislavL

+0

请参阅http://stackoverflow.com/questions/953035/multiple-column-foreign-key-in-mysql – StanislavL

回答

1

来自:http://dev.mysql.com/doc/refman/5.1/en/innodb-foreign-key-constraints.html

如果您重新创建了一个已删除的表,它必须具有符合引用它的外键约束的定义 。必须有 具有正确的列名称和类型,并且它必须具有 引用的k如前所述。如果这些不满足,MySQL 将返回错误号1005,并引用错误 消息中的错误150。

我想你必须使用相同数量的外键的,在你的代码中使用表盒2 PK,所以要么你只使用box_id为您的PK或添加外键表工具..

+0

感谢清理我的路径。 PK由box_id组成,coord现在保留为UNIQUE字段。谢谢 – Mayhem