2010-09-16 167 views
3

我想将外键添加到我的表中,但收到此错误。 错误代码:1005无法创建表'william。#sql-88c_3'(errno:150) 我有3个表。员工,客户和合同。MySQL错误代码:1005

雇工[employee_no PK],客户端[CUSTOMER_NO PK]合同[contract_no PK] 我想有合同外键合同[contract_no PK,employee_no FK],CUSTOMER_NO FK]

我试着做直接失败,我现在正在尝试alter语句。Alter脚本有什么问题吗?

ALTER TABLE contract 
    ADD CONSTRAINT `employee_no_fk2` FOREIGN KEY (`employee_no`) REFERENCES `employee` 
    (`employee_no`); 


    ALTER TABLE contract 
    ADD CONSTRAINT `Customer_no_fk2` FOREIGN KEY (`Customer_no`) REFERENCES `client` 
    (`Customer_no`); 

回答

10

大多数这样的错误,会涉及到数据类型小姐比赛左右。如果你可以去通过这些链接..它可能会帮助你,我想.. Check-this ......也Check-this

当他们在第二个环节说:

你应该看的第一个地方是数据类型是否一致外键和主键列之间 。

mysql> SHOW engine innodb STATUS; 

------------------------ 
LATEST FOREIGN KEY ERROR 
------------------------ 
100130 17:16:57 Error IN FOREIGN KEY CONSTRAINT OF TABLE sampledb/#sql-4a0_2: 
FOREIGN KEY(member_type) 
REFERENCES common_lookup(common_lookup_id): 
Cannot find an INDEX IN the referenced TABLE WHERE the 
referenced COLUMNS appear AS the FIRST COLUMNS, OR COLUMN types 
IN the TABLE AND the referenced TABLE do NOT MATCH FOR CONSTRAINT. 
+1

第二个链接非常有帮助。我试图添加一个外键与删除设置null,但我的目标列没有null约束,这是给我这个问题。我可以通过'SHOW引擎innodb STATUS;'命令找出问题。 – 2013-07-29 08:40:50

+1

第二链接ftw!我按照他的描述:“我遇到的最常见的变化是主键列使用int无符号数据类型,而外键列使用int数据类型,InnoDB Engine停止这个当然,你可以通过改变外键数据类型来修改它以匹配int无符号数据类型。“ – 2014-02-04 00:43:25

2

确保您试图引用没有索引和/或不是主键的键字段之一。并且两个关键字段类型和/或大小应该完全匹配,并且确保这两个表都是InnoDB表。

0

上次我遇到了这一点,这是约束:引用的表密钥类型是“廉政”并参照表有“无符号整型”,指而不是int。