错误:无法添加外键约束

时间:2014-05-21 09:45:24

标签: mysql sql foreign-keys

我正在尝试向表中添加外部约束:

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_tmpcarpark_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
);

任何帮助都将被指定。

1 个答案:

答案 0 :(得分:1)

正如erorr消息所说,您需要carpark_id作为carparks_tmp上索引的第一列。

所以,你应该添加一个索引,如:

  CREATE INDEX index_name
            ON carparks_tmp(carpark_id);

然后您就可以创建外键了。