温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

MySQL表rename引起外键问题解析

发布时间:2020-04-27 10:37:28 来源:亿速云 阅读:546 作者:三月 栏目:MySQL数据库

本文主要给大家介绍MySQL表rename引起外键问题解析,其所涉及的东西,从理论知识来获悉,有很多书籍、文献可供大家参考,从现实意义角度出发,亿速云累计多年的实践经验可分享给大家。

背景:
由于zabbix监控的问题图形展示很慢,对zabbix 库的events表进行了清理,清理过程采用了原表rename成bak表,重建events表后,将备份表部分数据导入到新表中。

后发现zabbix平台无法报警,无法恢复报警,日志类似报错: 2315:20190301:104933.609 [Z3005] query failed: [1452] Cannot add or update a child row: a foreign key constraint fails (`zabbix`.`event_recovery`, CONSTRAINT `c_event_recovery_1` FOREIGN KEY (`eventid`) REFERENCES `events_bak20190225` (`eventid`) ON DELETE CASCADE) [insert into event_recovery (eventid,r_eventid,correlationid,c_eventid,userid) values (4242559,4242581,null,null,null),(4242561,4242580,null,null,null),(4242447,4242580,null,null,null);

原来rename后,关联的外键表的约束竟然一并修改成了归档表的关联。
处理方法如下:
查看哪些表建立外键时关联了归档表

MySQL表rename引起外键问题解析

select  distinct TABLE_NAME,CONSTRAINT_NAME,REFERENCED_TABLE_NAME from INFORMATION_SCHEMA.KEY_COLUMN_USAGE where TABLE_SCHEMA  ='zabbix' and CONSTRAINT_name != 'PRIMARY' and REFERENCED_TABLE_NAME like 'event%'; +----------------+--------------------+-----------------------+ | TABLE_NAME     | CONSTRAINT_NAME    | REFERENCED_TABLE_NAME | +----------------+--------------------+-----------------------+ | acknowledges   | c_acknowledges_2   | events                | | alerts         | c_alerts_2         | events                | | alerts         | c_alerts_5         | events                | | event_recovery | c_event_recovery_1 | events                | | event_recovery | c_event_recovery_2 | events                | | event_recovery | c_event_recovery_3 | events                | | event_tag      | c_event_tag_1      | events_bak20190225    | | problem        | c_problem_1        | events                | | problem        | c_problem_2        | events                | +----------------+--------------------+-----------------------+

查看表结构:

show create table event_tag\G *************************** 1. row ***************************       Table: event_tag Create Table: CREATE TABLE `event_tag` (  `eventtagid` bigint(20) unsigned NOT NULL,  `eventid` bigint(20) unsigned NOT NULL,  `tag` varchar(255) NOT NULL DEFAULT '',  `value` varchar(255) NOT NULL DEFAULT '',  PRIMARY KEY (`eventtagid`),  KEY `event_tag_1` (`eventid`),  CONSTRAINT `c_event_tag_1` FOREIGN KEY (`eventid`) REFERENCES `events_bak20190225` (`eventid`) ON DELETE CASCADE ) ENGINE=InnoDB DEFAULT CHARSET=utf8

修改外键约束:

alter table event_tag drop FOREIGN KEY  c_event_tag_1; alter table event_tag add FOREIGN KEY  c_event_tag_1 (`eventid`) REFERENCES `events`(`eventid`) ON DELETE CASCADE;

zabbix好多外键,下次清理数据直接删除吧。

看了以上MySQL表rename引起外键问题解析介绍,希望能给大家在实际运用中带来一定的帮助。本文由于篇幅有限,难免会有不足和需要补充的地方,大家可以继续关注亿速云行业资讯板块,会定期给大家更新行业新闻和知识,如有需要更加专业的解答,可在官网联系我们的24小时售前售后,随时帮您解答问题的。

 

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI