![](https://img.haomeiwen.com/i12699976/bdab8203306ec202.png)
第一种方法
是网上的方法,可以直接使用,【MySQL 查看数据库中有主外键关系的表信息】
SELECT
C.TABLE_SCHEMA 拥有者,
C.REFERENCED_TABLE_NAME 父表名称,
C.REFERENCED_COLUMN_NAME 父表字段,
C.TABLE_NAME 子表名称,
C.COLUMN_NAME 子表字段,
C.CONSTRAINT_NAME 约束名,
T.TABLE_COMMENT 表注释,
R.UPDATE_RULE 约束更新规则,
R.DELETE_RULE 约束删除规则
FROM
INFORMATION_SCHEMA.KEY_COLUMN_USAGE C
JOIN INFORMATION_SCHEMA. TABLES T ON T.TABLE_NAME = C.TABLE_NAME
JOIN INFORMATION_SCHEMA.REFERENTIAL_CONSTRAINTS R ON R.TABLE_NAME = C.TABLE_NAME
AND R.CONSTRAINT_NAME = C.CONSTRAINT_NAME
AND R.REFERENCED_TABLE_NAME = C.REFERENCED_TABLE_NAME
WHERE
C.REFERENCED_TABLE_NAME IS NOT NULL;
![](https://img.haomeiwen.com/i12699976/081096f4043f8ea0.png)
UPDATE/DELETE_RULE 类型:
- CASCADE: 从父表中删除或更新对应的行 ,同时自动的删除或更新自表中匹配的行 。ON DELETE CANSCADE和ON UPDATE CANSCADE都被InnoDB所支持 。
- SET NULL: 从父表中删除或更新对应的行 ,同时将子表中的外键列设为空 。注意, 这些在外键列没有被设为NOT NULL时才有效。 ON DELETE SET NULL和ON UPDATE SET SET NULL都被InnoDB所支持 。
- NO ACTION: InnoDB拒绝删除或者更新父表 。
- RESTRICT: 拒绝删除或者更新父表 。指定RESTRICT( 或者NO ACTION )和忽略ON DELETE或者ON UPDATE选项的效果是一样的 。
- SET DEFAULT: InnoDB目前不支持 。
第二种方法:
第二种方法会列出所有的非系统数据所有表的主键信息和外键信息,第一种方法只会列出外键约束信息。
SELECT
O.CONSTRAINT_SCHEMA,
O.CONSTRAINT_NAME,
O.TABLE_SCHEMA,
O.TABLE_NAME,
O.COLUMN_NAME,
O.REFERENCED_TABLE_SCHEMA,
O.REFERENCED_TABLE_NAME,
O.REFERENCED_COLUMN_NAME,
O.UPDATE_RULE,
O.DELETE_RULE,
O.UNIQUE_CONSTRAINT_NAME,
T.CONSTRAINT_TYPE
FROM
(
SELECT
K.CONSTRAINT_SCHEMA,
K.CONSTRAINT_NAME,
K.TABLE_SCHEMA,
K.TABLE_NAME,
K.COLUMN_NAME,
K.REFERENCED_TABLE_SCHEMA,
K.REFERENCED_TABLE_NAME,
K.REFERENCED_COLUMN_NAME,
R.UPDATE_RULE,
R.DELETE_RULE,
R.UNIQUE_CONSTRAINT_NAME
FROM
information_schema.KEY_COLUMN_USAGE K
LEFT JOIN information_schema.REFERENTIAL_CONSTRAINTS R ON K.CONSTRAINT_NAME = R.CONSTRAINT_NAME
) AS O
INNER JOIN Information_schema.TABLE_CONSTRAINTS T ON O.Table_Name = T.TABLE_NAME
AND T.CONSTRAINT_NAME = O.CONSTRAINT_NAME
WHERE
O.CONSTRAINT_SCHEMA != 'mysql'
AND O.CONSTRAINT_SCHEMA != 'sys';
![](https://img.haomeiwen.com/i12699976/e7271ad192655a9b.png)
网友评论