MySQL查出所有的主外键关系、级联关系,并记录起来,删除所有的外键关系,根据记录重新建立外键关系

  1. 查出所有的主外键关系并记录起来
    可以通过查询information_schema数据库中的REFERENTIAL_CONSTRAINTS表来获取所有的主外键关系。以下是查询语句:

`

SELECT
    K.CONSTRAINT_NAME, -- 外键约束名
    K.TABLE_NAME, -- 子表外键所在表名
    K.COLUMN_NAME, -- 外键所在列名
    K.REFERENCED_TABLE_NAME, -- 主表主键所在表名
    K.REFERENCED_COLUMN_NAME,-- 主键所在列名
		R.UPDATE_RULE,-- 修改规则
    R.DELETE_RULE-- 删除规则
FROM
    INFORMATION_SCHEMA.KEY_COLUMN_USAGE K
		LEFT JOIN information_schema.REFERENTIAL_CONSTRAINTS R ON K.CONSTRAINT_NAME = R.CONSTRAINT_NAME
WHERE
    K.REFERENCED_TABLE_SCHEMA = 'test' -- 数据库名
    AND K.REFERENCED_TABLE_NAME IS NOT NULL;

`
2. 将查询结果记录下来,可以通过导出成csv或者直接复制到文本文件中。
或者根据上边查询的结果、生成新建外键关系的DDL

`

--重新建立索引的DDl
SELECT
    CONCAT('ALTER TABLE ', TABLE_NAME, ' ADD CONSTRAINT ', CONSTRAINT_NAME,  ' FOREIGN KEY ', '\(', COLUMN_NAME, '\)', ' REFERENCES ', REFERENCED_TABLE_NAME, ' \(',REFERENCED_COLUMN_NAME,'\)', ' ON UPDATE ', UPDATE_RULE, ' ON DELETE ', DELETE_RULE,';')
FROM
    (SELECT
    K.CONSTRAINT_NAME, -- 外键约束名
    K.TABLE_NAME, -- 外键所在表名
    K.COLUMN_NAME, -- 外键所在列名
    K.REFERENCED_TABLE_NAME, -- 主键所在表名
    K.REFERENCED_COLUMN_NAME,-- 主键所在列名
		
		R.UPDATE_RULE,-- 修改规则
    R.DELETE_RULE-- 删除规则
FROM
    INFORMATION_SCHEMA.KEY_COLUMN_USAGE K
		LEFT JOIN information_schema.REFERENTIAL_CONSTRAINTS R ON K.CONSTRAINT_NAME = R.CONSTRAINT_NAME

WHERE
    K.REFERENCED_TABLE_SCHEMA = 'test' -- 数据库名
    AND K.REFERENCED_TABLE_NAME IS NOT NULL) AS X

`

  1. 删除所有外键关系
    可以通过以下语句来删除所有外键关系:

`

SELECT
    CONCAT('ALTER TABLE ', TABLE_NAME, ' DROP FOREIGN KEY ', CONSTRAINT_NAME, ';')
FROM
    information_schema.REFERENTIAL_CONSTRAINTS
WHERE
    CONSTRAINT_SCHEMA = 'test';

`

执行以上语句会生成一系列的ALTER TABLE语句,将这些语句复制粘贴到MySQL客户端中执行即可删除所有的外键关系。

  1. 根据记录重新建立外键关系
    根据记录重新建立外键关系需要使用之前记录的数据,以下是一个示例:

`

ALTER TABLE table_name ADD CONSTRAINT constraint_name FOREIGN KEY (column_name) REFERENCES referenced_table_name 	(referenced_column_name) ON UPDATE update_rule ON DELETE delete_rule;

ALTER TABLE je_test_change_key ADD CONSTRAINT JE_1677033854506 FOREIGN KEY (ID) REFERENCES zibiaob (ZIBIAOB_WJ) ON 		UPDATE CASCADE ON DELETE CASCADE;

`

其中,table_name为外键所在的表名,constraint_name为外键的名称,column_name为外键所在的列名,referenced_table_name为被引用的表名,referenced_column_name为被引用的列名。同时,我们还指定了ON UPDATE和ON DELETE规则,用于指定级联操作的规则。

需要注意的是,重新建立外键关系时,需要先创建被引用的表和列,否则会出现错误。

posted @   SuperSuperWang  阅读(315)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
点击右上角即可分享
微信分享提示