- 查出所有的主外键关系并记录起来
可以通过查询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
`
- 删除所有外键关系
可以通过以下语句来删除所有外键关系:
`
SELECT
CONCAT('ALTER TABLE ', TABLE_NAME, ' DROP FOREIGN KEY ', CONSTRAINT_NAME, ';')
FROM
information_schema.REFERENTIAL_CONSTRAINTS
WHERE
CONSTRAINT_SCHEMA = 'test';
`
执行以上语句会生成一系列的ALTER TABLE语句,将这些语句复制粘贴到MySQL客户端中执行即可删除所有的外键关系。
- 根据记录重新建立外键关系
根据记录重新建立外键关系需要使用之前记录的数据,以下是一个示例:
`
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