我正在尝试向表中添加外部约束:
ALTER TABLE owners_carparks2users
# ADD CONSTRAINT FOREIGN KEY (`agglomeration_id`) REFERENCES `carparks_tmp` (`agglomeration_id`), <- this works fine
ADD CONSTRAINT FOREIGN KEY (`carpark_id`) REFERENCES `carparks_tmp` (`carpark_id`)
但我收到错误:
Cannot add foreign key constraint
详细错误(SHOW ENGINE INNODB STATUS
):
------------------------最新外国关键错误 ------------------------ 2014-05-21 11:40:12 127938000表停车场外键约束错误/#sql-2e5_6a:FOREIGN键 (
carpark_id
)参考carparks_tmp
(carpark_id
):找不到 引用表中显示引用列的索引 作为表中的第一列或列类型以及引用的列 表与约束不匹配。请注意内部存储类型 在使用&gt; = InnoDB-4.1.12创建的表中更改了ENUM和SET,以及 旧表中的这些列不能被new中的这些列引用 表。看到 http://dev.mysql.com/doc/refman/5.6/en/innodb-foreign-key-constraints.html 正确的外键定义。
我的桌子:
CREATE TABLE carparks_tmp (
`agglomeration_id` int(11) NOT NULL,
`carpark_id` int(11) NOT NULL,
`name` varchar(100) DEFAULT NULL,
PRIMARY KEY (`agglomeration_id`,`carpark_id`)
);
DROP TABLE IF EXISTS owners_carparks2users;
CREATE TABLE owners_carparks2users (
`agglomeration_id` int(11) NOT NULL,
`carpark_id` int(11) NOT NULL,
`user_id` bigint(20) NOT NULL
);
任何帮助都将被指定。
答案 0 :(得分:1)
正如erorr消息所说,您需要carpark_id
作为carparks_tmp
上索引的第一列。
所以,你应该添加一个索引,如:
CREATE INDEX index_name
ON carparks_tmp(carpark_id);
然后您就可以创建外键了。