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

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

时间:2023-05-05 16:34:21浏览次数:43  
标签:关系 NAME 记录 -- CONSTRAINT 外键 TABLE name

  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规则,用于指定级联操作的规则。

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

标签:关系,NAME,记录,--,CONSTRAINT,外键,TABLE,name
From: https://www.cnblogs.com/SuperSuperWang/p/17374495.html

相关文章

  • Vue3项目(Vite+TS)使用Web Serial Api全记录
    前言之前写了一个vue+django的一个通过串口控制的上位机系统。但是实际生产中,不如部署到服务器上,这样可以更好的节约成本。但是这样就需要弄一个客户端来控制处理串口信息。那我就在想能不能通过网页直接拿到客户端的串口信息。所以问了万能的chatgpt,得到了以下答案:是的,前端可以......
  • Mysql大概内容记录,慢慢加
    Mysql的事务特性以及隔离级别(整理了部分锁、MVCC的内容)因为部分是整理<参考资料>中的博文内容,侵删!四大特性Atomicity:原子性原子性是指事务包含的所有操作要么全部成功,要么全部失败回滚,因此事务的操作如果成功就必须要完全应用到数据库,如果操作失败则不能对数据库有任何影响。......
  • SpringBoot中策略模式+工厂模式业务实例(接口传参-枚举类查询策略映射关系-执行不同策
    场景设计模式-策略模式在Java中的使用示例:https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/127622238上面讲了策略模式在Java中的使用示例。下面看一个在SpringBoot中的实际使用示例。业务场景:有多个煤矿,信号灯有多个厂家/规则,每个煤矿对应一种信号灯。需要编......
  • umi +react 搭建项目细节记录
    配置请求域名,有umirc.ts文件可以直接在该文件加proxy:{  '/api':{ //检测域名后面带/api/的路径   target:'http://192.168.0.90', //要请求的域名或IP地址   'changeOrigin':true,   //'pathRewrite':{'^/api':''......
  • sqlserver 查询表中的主键、外键列及外键表,外表中的主键列
    --获取主键信息EXECsp_pkeys@table_name='tablename'--获取外键方法一SELECTField=(SELECTnameFROMsyscolumnsWHEREcolid=b.fkeyANDid=b.fkeyid),FKTable=object_name(b.rkeyid),FKKeyField=(SELECTnameFROMsyscolumnsWHEREcolid=b.rkeyANDid=b.rkeyid......
  • CTFer成长记录——杂项专题·隐写
    一、题目链接https://ctf.show/challenges#萌新%20隐写2-82二、题意解释一个加密的压缩包,这里可能是伪加密或者需要暴力破解,题目提示:那么需要用工具进行暴力破解。三、解法步骤在知道需要暴力破解后,可以选择使用archpr这个工具。打开该工具,在工具中打开flag.zip压缩文件。......
  • CentOS 7 history显示命令操作记录的时间和用户身份
     centos7中,history命令中不显示操作命令的时间和用户身份解决该问题只需要在/etc/profile中添加如下变量即可:设置环境变量exportHISTTIMEFORMAT="%Y-%m-%d%H:%M:%S`whoami`"刷新环境变量然后运行source/etc/profile命令即可,注意引号中的空格 history命令输出......
  • 2023年5月4日记录
    求出指定日期距离1990年1月1日的天数这里为整个算法的核心部分。经过分析可以得到指定日期距离1990年1月1日的天数totalDay=1990年至指定年的前一年共有多少天+指定年中到指定日期的天数。由于每月天数不同,可以设置一个月份数组intperMonth[13],存放每月的天数。程序利用年份作......
  • Qt6.5编译记录
        Qt6.5的长期支持版释放了,就开始了再次的折腾。首先安装编译环境,官方文档的编译环境链接为:QtforWindows-BuildingfromSource|Qt6.5 可以看到,很清爽,只需要Cmake,Ninja和Python3,不再需要其他的了,而且都提供了链接(但是实际编译时,如果需要编译QtPDF,还是需要Node......
  • batchsize、iteration、epoch之间的关系
    有的时候总是会弄错batchsize、iteration、epoch之间的关系,现在终于明白了。1、batchsize是批次大小,假如取batchsize=24,则表示每次训练时在训练集中取24个训练样本进行训练。2、iteration是迭代次数,1个iteration就等于一次使用24(batchsize大小)个样本进行训练。3、epoch,1个epoch......