0

我正在尝试运行以下内容:

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 环境中运行它就可以正常工作。

4

3 回答 3

1

看看这个SO question

注意正确答案。检查列类型它们需要匹配。可能是你的问题。

一般来说,这里是Mysql中FK的权威指南。

除了 SHOW ERRORS 之外,如果出现涉及 InnoDB 表的外键错误(通常是 MySQL 服务器中的 Error 150),您可以通过查看 SHOW ENGINE INNODB STATUS 的输出来获得最近的 InnoDB 外键错误的详细说明.

编辑:纳入评论

PHPMyAdmin 上的表默认为MyISAM。在 Local 上,他们默认为InnoDBMyISAM不支持 FK。这并不能完全解释差异,因为基于MySql Documentation,它应该可以正常工作,而无需创建 FK。(可能是设置问题或旧版本问题)

于 2013-06-21T03:13:41.383 回答
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)
);
于 2013-06-21T04:42:31.270 回答
0

users存在和other_table存在吗?

您不能将外键引用到不存在的表。

之后您可以使用alter table.

于 2013-06-21T03:11:43.513 回答