MySQL表rename导致的外键问题
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了MySQL表rename导致的外键问题,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2566字,纯文字阅读大概需要4分钟。
内容图文
![MySQL表rename导致的外键问题](/upload/InfoBanner/zyjiaocheng/916/f4db4c3911c64827b9a4cc8780bbbf2b.jpg)
背景:
由于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后,关联的外键表的约束竟然一并修改成了归档表的关联。
处理方法如下:
查看哪些表建立外键时关联了归档表
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导致的外键问题全部内容,希望文章能够帮你解决MySQL表rename导致的外键问题所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。