首页 > 解决方案 > 错误 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';

标签: mysqlmariadb

解决方案


推荐阅读