MySQL information_schema 外键关联关系
背景:最近业务上经常遇到客户试用系统一段时候后,由于试用阶段对系统不熟悉,试用后需要将使用阶段的测试数据都要清空,然后进行正式使用系统。清空基础数据相关的表操作,但是有外键约束,是无法直接删除,需要先将有外键关联的表的数据清空,解除外键约束。
如果才能获取有哪些表引用了该表呢?其实我们可用从MySQL中的information_schema
.KEY_COLUMN_USAGE
来获取。
-- 获取所有信息
SELECT *
FROM information_schema.KEY_COLUMN_USAGE
WHERE CONSTRAINT_SCHEMA = '{database}'
AND REFERENCED_TABLE_NAME = '{table}';
-- 获取引用表及外键关联列名
SELECT TABLE_NAME, COLUMN_NAME
FROM information_schema.KEY_COLUMN_USAGE
WHERE CONSTRAINT_SCHEMA = '{database}'
AND REFERENCED_TABLE_NAME = '{table}';
表information_schema.KEY_COLUMN_USAGE字段说明
列名 | 说明 |
---|---|
CONSTRAINT_CATALOG | 约束类型(值永远都是def) |
CONSTRAINT_SCHEMA | 约束所在的数据库名 |
CONSTRAINT_NAME | 约束名 |
TABLE_CATALOG | 表类型(值永远都是def) |
TABLE_SCHEMA | 表所在的数据库名 |
TABLE_NAME | 引用的表名 |
COLUMN_NAME | 引用的列名 |
ORDINAL_POSITION | 原始位置 |
POSITION_IN_UNIQUE_CONSTRAINT | 在唯一约束的位置 |
REFERENCED_TABLE_SCHEMA | 被引用表所在的数据库名 |
REFERENCED_TABLE_NAME | 被引用的表名 |
REFERENCED_COLUMN_NAME | 被引用表的列名 |