场景:
MySQL更改原表名sys_org_element为sys_org_element_bak1导致了所有引用sys_org_element的表的id做外键的表全部引用了sys_org_element_bak1表,进而引发因外键导致的数据插入不了的问题。
解决办法:
一开始想到的是手动更改外键呗,结果发现有1000多个引用,太坑了,坑死自己吧。这条路是行不通了,能不能动态生成sql去自动搞,搜索之后发现还真行。
查询有多少表引用
1 2 3 | SELECT CONSTRAINT_NAME, TABLE_NAME, COLUMN_NAME FROM INFORMATION_SCHEMA.KEY_COLUMN_USAGE WHERE REFERENCED_TABLE_NAME = 'sys_org_element_bak1' ; |
动态生成sql,先删除外键,然后再添加外键
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | SELECT CONCAT( " ALTER TABLE `" ,TABLE_NAME, "` DROP FOREIGN KEY `" ,CONSTRAINT_NAME, "`; ALTER TABLE `" ,TABLE_NAME, "` ADD CONSTRAINT `" ,CONSTRAINT_NAME, "` FOREIGN KEY (`" ,COLUMN_NAME, "`) REFERENCES `sys_org_element` (`id`) ON DELETE RESTRICT ON UPDATE RESTRICT; " ) sql1 FROM INFORMATION_SCHEMA.KEY_COLUMN_USAGE WHERE REFERENCED_TABLE_NAME = 'sys_org_element_bak1' AND REFERENCED_COLUMN_NAME = 'id' ; |