我正在尝试运行以下内容:
CREATE TABLE IF NOT EXISTS table_name (
user_id int(11) NOT NULL,
other_id int(11) NOT NULL,
FOREIGN KEY (user_id) REFERENCES users(id),
FOREIGN KEY (other_id) REFERENCES other_table(id),
PRIMARY KEY (user_id, other_id)
);
并收到以下错误:
#1005 - Can't create table 'database_name.table_name' (errno: 150)
我做错了什么?这样可以在另一个环境而不是phpmyadmin sql环境中运行它。
答案 0 :(得分:1)
看看这个SO question。
请注意正确的答案。 检查列类型它们需要匹配。可能是你的问题。
一般来说,这是FK in Mysql的权威指南。
除了SHOW ERRORS之外,如果出现外键错误 涉及InnoDB表(通常是MySQL Server中的Error 150),你 可以获得最近InnoDB外国的详细解释 检查SHOW ENGINE INNODB STATUS的输出时出现键错误。
编辑:纳入评论
PHPMyAdmin上的表默认为 MyISAM 。在Local,他们默认为 InnoDB 。 MyISAM 不支持FK。这并没有完全解释差异,因为基于MySql Documentation,它应该正常工作,而不是创建FK。 (可能是设置问题或旧版本问题)
答案 1 :(得分:0)
users
和other_table
是否存在?
您不能将外键引用到不存在的表。
您可以随后使用alter table
添加引用。
答案 2 :(得分:0)
DROP TABLE IF EXISTS `table_name`;
CREATE TABLE IF NOT EXISTS table_name (
user_id int(11) NOT NULL,
other_id int(11) NOT NULL,
FOREIGN KEY (user_id) REFERENCES users(id),
FOREIGN KEY (other_id) REFERENCES other_table(id),
PRIMARY KEY (user_id, other_id)
);