3

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

雇员 [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`);
4

4 回答 4

10

大多数此类错误将与数据类型未匹配有关..如果您可以通过这些链接..我猜它可能会对您有所帮助..检查-这个 ...也检查-这个

正如他们在第二个链接中所说:

您应该首先查看外键和主键列之间的数据类型是否一致。

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.
于 2010-09-17T00:04:37.763 回答
2

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

于 2013-01-08T13:16:17.537 回答
1

这可能是由于两个原因

  1. 表创建失败,因为未正确形成外键约束或
  2. 约束中的数据类型不匹配。

以下链接会有所帮助

http://dev.mysql.com/doc/refman/5.0/en/innodb-error-codes.html

于 2013-08-05T06:51:33.393 回答
0

上次我遇到这个时,它是约束:引用的表键类型是'int',并且引用表错误地有'unsigned int'引用字段,而不是int。

于 2014-01-25T04:19:26.633 回答