tha*_*awg 14 mysql foreign-keys mysql-error-1005
所以我试图在我的一个表中添加一个新的外键:
ALTER TABLE `UserTransactions`.`ExpenseBackTransactions`
ADD CONSTRAINT `FK_EBTx_CustomAccountID`
FOREIGN KEY (`CustomAccountID` )
REFERENCES `UserTransactions`.`CustomAccounts` (`CustomAccountID`)
ON DELETE NO ACTION
ON UPDATE NO ACTION,
ADD INDEX `FK_EBTx_CustomAccountID` (`CustomAccountID` ASC) ;
Run Code Online (Sandbox Code Playgroud)
我一直收到以下错误:
Error Code: 1005
Can't create table './UserTransactions/#sql-187a_29.frm' (errno: 150)
Run Code Online (Sandbox Code Playgroud)
我过去对这个表和其他表做了很多改动,这是我第一次遇到这个问题.是什么导致它的想法?
UPDATE
我的SHOW INNODB STATUS错误:
------------------------
LATEST FOREIGN KEY ERROR
------------------------
110525 15:56:36 Error in foreign key constraint of table UserTransactions/#sql-187a_2c:
FOREIGN KEY (`CustomAccountID` )
REFERENCES `UserTransactions`.`CustomAccounts` (`CustomAccountID` )
ON DELETE NO ACTION
ON UPDATE NO ACTION
, ADD INDEX `FK_EBTx_CustomAccountID` (`CustomAccountID` ASC):
Cannot resolve table name close to:
(`CustomAccountID` )
ON DELETE NO ACTION
ON UPDATE NO ACTION
, ADD INDEX `FK_EBTx_CustomAccountID` (`CustomAccountID` ASC)
Run Code Online (Sandbox Code Playgroud)
Kon*_*rak 27
这里有一个很好的清单.
以下是人们为可怕的errno 150报告的已知原因的运行列表:
- 两个关键字段类型和/或大小不完全匹配.例如,如果一个是INT(10),则关键字段也需要是INT(10)而不是INT(11)或TINYINT.您可能希望使用SHOW CREATE TABLE确认字段大小,因为查询浏览器有时会直观地显示INT(1)和INT(11)的INTEGER.您还应检查一个是否已签名而另一个是否为UNSIGNED.它们都需要完全相同.(关于签名vs未签名的更多信息).
- 您尝试引用的关键字段之一没有索引和/或不是主键.如果关系中的某个字段不是主键,则必须为该字段创建索引.(感谢Venkatesh和Erichero以及Terminally Incoherent的提示)
- 外键名称是已存在键的副本.检查外键的名称在数据库中是否唯一.只需在密钥名称的末尾添加一些随机字符即可对其进行测试.(感谢Niels的提示)
- 您的一个或两个表是MyISAM表.为了使用外键,表必须都是InnoDB.(实际上,如果两个表都是MyISAM,那么您将不会收到错误消息 - 它只是不会创建密钥.)在查询浏览器中,您可以指定表类型.
- 您已指定级联ON DELETE SET NULL,但相关键字段设置为NOT NULL.您可以通过更改级联或将字段设置为允许NULL值来解决此问题.(感谢Sammy和J Jammin)
- 确保Charset和Collate选项在表级别以及关键列的单个字段级别都相同.(感谢FRR提供的这个提示)
- 您的外键列上有一个默认值(即默认值= 0)(感谢Omar的提示)
- 关系中的一个字段是组合(复合)键的一部分,并且没有它自己的单独索引.即使该字段具有索引作为复合键的一部分,您也必须仅为该键字段创建单独的索引,以便在约束中使用它.(感谢Alex提供的这个提示)
- 您在ALTER语句中有语法错误,或者您在关系中输错了其中一个字段名称(感谢Christian&Mateo的提示)
- 外键的名称超过64个字符的最大长度.(感谢Nyleta提示)
| 归档时间: |
|
| 查看次数: |
7081 次 |
| 最近记录: |