mysql - 错误 121 - 写入或更新时重复密钥
问题描述
即使该表不存在且 FK 未显示在系统架构中,MariaDB 10.3.13/14/15/16 中仍会继续出现此错误。我已经阅读了许多有关此错误的帖子,并且知道 FK 名称不能存在于数据库中的其他任何位置,而事实并非如此。10.3.12没有出现这个问题,所以我开始怀疑这是不是MariaDB的问题?我不敢相信答案应该是“删除数据库并重新开始”,因为应该有某种方法可以让 Maria 看到 FK 不存在。
完全删除表并验证有问题的 FK 仅存在于已删除的此表中。
我可以通过从 create table 语句中删除 FK 约束的声明来重建表,一旦表重建,FK 就在那里,就像它以某种方式从数据库中仍然存在的某个地方拾取它一样 - 疯狂。
我的创建语句如下所示
CREATE TABLE `trace_properties` (
`MessageId` bigint(20) NOT NULL,
`PropertyName` varchar(255) NOT NULL,
`PropertyValue` varchar(4096) NOT NULL,
PRIMARY KEY (`MessageId`,`PropertyName`),
KEY `NameValueIDX` (`PropertyName`,`PropertyValue`(767)),
KEY `MessageIdIDX` (`MessageId`),
CONSTRAINT `FK_traceproperties_1` FOREIGN KEY (`MessageId`) REFERENCES `trace_messages` (`TraceMessageId`) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
我的预期结果是我应该能够删除确实成功发生的 trace_properties,然后使用上面的脚本执行创建,该脚本在 100% 的时间内失败,表明 FK 存在。
但是,我可以运行以下查询并获得一个空结果集,这表明 FK 不存在,至少在信息模式中是这样。
SELECT * FROM information_schema.TABLE_CONSTRAINTS
WHERE information_schema.TABLE_CONSTRAINTS.CONSTRAINT_TYPE = 'FOREIGN KEY'
AND information_schema.TABLE_CONSTRAINTS.TABLE_SCHEMA = 'idf';
解决方案
推荐阅读
- laravel - Laravel 上的 Predis stream_socket_enable_crypto() 错误
- python - 在Django中以相同的表单方法为两个不同的提交按钮传递值
- verilog - 为什么向上/向下计数器不倒计时?
- git - 将新存储库推送到 Synology git 服务器时出现问题
- reactjs - 反应 JS 组件不显示
- python - Pandas:通过在 MultiIndexed DataFrame 上移动来添加列
- azure - 如何避免通过 terraform 脚本更新应用程序网关的后端池
- swiftui - 如何在我新创建的 SwiftUI 项目中处理这些错误消息?
- go - 获取 GORM 中的递归字段值
- pine-script - 点值计算