lam*_*eta 99 mysql foreign-keys mysql-error-1005
我在互联网上搜索了这个问题的解决方案并检查了SO问题,但没有解决方案适用于我的情况.
我想从表sira_no到metal_kod创建一个外键.
ALTER TABLE sira_no
ADD CONSTRAINT METAL_KODU FOREIGN KEY(METAL_KODU)
REFERENCES metal_kod(METAL_KODU)
ON DELETE SET NULL
ON UPDATE SET NULL ;
Run Code Online (Sandbox Code Playgroud)
该脚本返回:
Error Code: 1005. Can't create table 'ebs.#sql-f48_1a3' (errno: 150)
Run Code Online (Sandbox Code Playgroud)
我尝试在索引表中添加索引:
CREATE INDEX METAL_KODU_INDEX ON metal_kod (METAL_KODU);
Run Code Online (Sandbox Code Playgroud)
我在两个表(charset和collation)上检查了METAL_KODU.但无法找到解决这个问题的方法.有谁有想法吗?提前致谢.
编辑:这是metal_kod表:
METAL_KODU varchar(4) NO PRI
DURUM bit(1) NO
METAL_ISMI varchar(30) NO
AYAR_YOGUNLUK smallint(6) YES 100
Run Code Online (Sandbox Code Playgroud)
小智 262
错误代码:1005 - 代码中的主键引用错误
通常它是由于参考FK字段不存在.可能是你有错字错误,或检查案例应该是相同的,或者是字段类型不匹配.FK链接的字段必须与定义完全匹配.
一些已知原因可能是:
INT(10)
关键字段需要INT(10)
也是,而不是INT(11)
或TINYINT
.您可能需要确认字段大小,SHOW
CREATE
TABLE
因为查询浏览器有时会直观地显示INTEGER
两者INT(10)
和INT(11)
.你还应该检查一个不是SIGNED
,另一个是UNSIGNED
.它们都需要完全相同.MyISAM
表.为了使用外键,表必须都是InnoDB
.(实际上,如果两个表都是,MyISAM
那么您将不会收到错误消息 - 它只是不会创建密钥.)在查询浏览器中,您可以指定表类型.ON
DELETE
SET
NULL
,但相关键字段设置为NOT
NULL
.您可以通过更改级联或将字段设置为允许NULL
值来解决此问题.ALTER
语句中存在语法错误,或者您在关系中输入了一个字段名称有关更多详细信息,请参阅: MySQL错误号1005无法创建表
hap*_*dik 11
将数据库从一个服务器导出到另一个服务器时,也可能发生这种情况,默认情况下,这些表按字母顺序列出.
因此,您的第一个表可能具有另一个尚未创建的表的外键.在这种情况下,请禁用foreign_key_checks并创建数据库.
只需将以下内容添加到脚本中:
SET FOREIGN_KEY_CHECKS=0;
Run Code Online (Sandbox Code Playgroud)
它应该工作.
小智 5
有时是由于主表被删除(可能是通过禁用foreign_key_checks),但外键CONSTRAINT仍然存在于其他表中。就我而言,我删除了该表并尝试重新创建它,但它为我抛出了相同的错误。
因此,请尝试从所有表中删除所有外键约束(如果有),然后更新或创建表。
归档时间: |
|
查看次数: |
151675 次 |
最近记录: |