MYSQL建立外键失败几种情况记录Can''tcreatetable不能创建表

嘿,你说创建一个外键,对吗?这1 5 0个错误真是令人沮丧。
上周,客户询问为什么要报告此错误,并为此苦苦挣扎了几天。
让我告诉你,这个错误看起来像是文件权限或操作系统错误,但事实并非如此。

好吧,MySQL 正式承认这是一个错误,并且它已经在邮件列表中列出了好几年了。
但奇怪的是,他们从来不知道为什么。
我遇到了很多麻烦,我将给您一些最常见的原因,据我估计:
首先,必须严格遵守字段的类型和大小。
例如,如果是 INT(1 0),则外键也应该是 INT(1 0),而不是 INT(1 1 ) 或 TINYINT。
您需要仔细使用该命令来检查CREATOR文件。
有些工具会同时查找 INT(X) 和 INT(1 1 ) 并显示整数,这确实具有误导性。
这是一个重大问题,签名和未签名之间应该保持一致。
我可以轻松地移动一个签名和一个未签名的。
2 02 3 年,我在上海一家商场帮助客户时就遇到了这种情况,未签名的案例出了问题。

第二,你引用的字段必须是索引或者主键。
如果只是普通字段,则需要先创建一个列表。
例如,如果使用外键将A表中的某个字段与B表进行连接,但该字段在A表中没有索引,则会直接报错。
北京犯罪设计公司。
当时货源并不多,但运气好得早。

第三个与外键名称匹配。
有时,您会在表中给出外部关键字的名称和其他信息。
我建议您首先输入数据库中的所有键名称以确保唯一性。
如果不起作用,请尝试添加一些随机字母。
我在做自己的经验时经常使用这个技巧。

四、工程表问题。
如果要使用外键,则该表将来自 InnoDB。
MyISAM 表根本不支持外键,实际上不能在两个 MyISAM 表之间创建外键。
2 02 2 年在广州帮一位老客户改数据库结构的时候就遇到了这个问题,他坚持把MyISAM改成InnoDB来解决问题。

DE DELETE NOTHING 和 NOT NOT HING 的第五个矛盾。
DELETE 设置为 NO,但字段本身不允许任何值。
必须更改此设置,要么删除以更改为另一个策略,要么不允许使用有效字段。
我在深圳培训的时候就举过这个例子,学员们表示真的没想到。

第六,法规性质与规则证明不一致。
表字段和字符集/校对字段必须匹配。
这个比较晦涩难懂,但是确实有一些客户遇到过。
例如,如果表是utf8 ,字段是utf8 mb4 ,这样就可以完成奇妙的事情。

关于默认值的第七个问题。
如果您为外键字段设置默认值并且关联键中不存在该值,则可能会导致问题。
例如,您设置default='08 ,但关联表中没有值“08 ”。
这就要求关联表中有对应的值。

第九,SECOND语句的语法不正确。
修改表时语法有时不正确。
虽然不直接报1 5 0,但是外键关联就失效了。
最后,说实话,构建外键确实很麻烦。
如果您觉得这很烦人,只需使用 MyEclipse 生成 DDL 语句,它会为您处理详细信息。
我自己有时也懒得这么做。
反正这件事陷阱不少,就看运气了。

mysql 添加外键报错,Error Code: 1215. Cannot add foreign key constraint

这是一个陷阱,不要使用MyISAM表来创建外键。

mysql如何排查外键约束失败

上周我的朋友遇到了 MySQL 外键约束错误问题。
首先,他自己看了错误信息,确认是ERROR 1 4 5 2 (2 3 000)类型的错误,询问具体的数据库名、子表名、外键约束名、外键列、父表、父表列。
这让我们能够直接找到问题的约束条件,缩小问题解决的范围。

然后,他运行了 SHOW ENGINE INNODB STATUS 命令,并在输出末尾的 LATEST FOREIGN KEY ERROR 块中找到了更详细的上下文,包括触发错误的 SQL 语句、失败值以及相关的表列。
例如,输出显示在父表中找不到匹配外键列的索引。

然后我检查了数据和结构,首先检查父表数据是否存在,然后根据错误消息中的value_X运行查询。
原来是父表缺少记录,需要插入或者修改数据。

我们还检查了链接列的数据类型和属性,包括数据类型和长度、字符集和排序规则以及 NULL 值的处理。
同时,他查询了外键定义和规则,包括查看子表外键约束以及查询information_schema获取详细规则。

在处理事务和删除操作时,他发现如果在事务内执行操作,必须确保父表数据已经提交后才能引用。
如果外键的ONDELETE规则是RESTRICT或NOACTION,则必须先删除子表引用,然后再删除父表记录。

我们也考虑过在数据迁移或恢复过程中暂时禁用外键验证,但注意到这可能会损害数据完整性,因此操作后应验证数据一致性。

最后,我们还提出了一些预防措施,例如在设计阶段纳入相关列属性、应用层预验证、合理设置ONDELETE/UPDATE策略、批量导入时控制顺序、明确外键约束命名、监控错误日志等。

通过这些系统性的步骤,我们成功排查并解决了2 02 3 年MySQL外键约束失效问题。
一路上有波折,但我还是很有成就感。
你可以弄清楚。
如果您遇到类似问题,可以尝试以下方法:您还好吗?

mysql 不能创建外键

是的,这就是问题所在。
表类型无效,字段名无效,类型必须一致。
字符集也要混合,UTF8 最好。
你检查过这些吗?千万不要把一长串字符搞错了,改了就没有价值了。
这样做之后,外键应该就没有问题了。
我在做的一个项目中就遇到过这样一个模糊的问题。
像这样先自己看看吧。