查看整个 MySQL 数据库的所有外键约束

Posted

技术标签:

【中文标题】查看整个 MySQL 数据库的所有外键约束【英文标题】:View all foreign key constraints for entire MySQL database 【发布时间】:2011-02-10 16:26:55 【问题描述】:

我有一个包含 150 多个表的大型数据库,我最近收到了这些表。我只是想知道是否有一种简单的方法可以查看整个数据库的所有外键约束,而不是基于每个表。

【问题讨论】:

在这里查看安迪的答案:***.com/questions/201621/… 【参考方案1】:

您可以为此使用INFORMATION_SCHEMA 表。例如,INFORMATION_SCHEMA TABLE_CONSTRAINTS 表。

应该这样做:

select *
from INFORMATION_SCHEMA.TABLE_CONSTRAINTS
where CONSTRAINT_TYPE = 'FOREIGN KEY'

【讨论】:

看起来这正是我所需要的。谢谢! 有什么办法可以实际列出外键的字段名吗?【参考方案2】:

这是我更喜欢得到有用的信息:

SELECT CONSTRAINT_NAME,
       UNIQUE_CONSTRAINT_NAME, 
       MATCH_OPTION, 
       UPDATE_RULE,
       DELETE_RULE,
       TABLE_NAME,
       REFERENCED_TABLE_NAME
FROM INFORMATION_SCHEMA.REFERENTIAL_CONSTRAINTS
WHERE CONSTRAINT_SCHEMA = 'your_database_name'

【讨论】:

【参考方案3】:

如果您只有 1 个数据库,则用户 RedFilter 当前接受的答案可以正常工作,但如果您有很多数据库,则不会。

输入use information_schema; 后,使用此查询获取name_of_db 的外键:

select * from `table_constraints` where `table_schema` like `name_of_db` and `constraint_type` = 'FOREIGN KEY'

使用此查询将name_of_db 的外键保存到全局可写文件output_filepath_and_name

select * from `table_constraints` where `table_schema` like "name_of_db" and `constraint_type` = 'FOREIGN KEY' into outfile "output_filepath_and_name" FIELDS TERMINATED BY ',' ENCLOSED BY '"';

【讨论】:

【参考方案4】:

SQL:

select constraint_name,
       table_schema,
       table_name
from   information_schema.table_constraints
where  constraint_schema = 'astdb'

输出:

+----------------------------+--------------+---------------------+
| constraint_name            | table_schema | table_name          |
+----------------------------+--------------+---------------------+
| PRIMARY                    | astdb        | asset_category      |
| PRIMARY                    | astdb        | asset_type          |
| PRIMARY                    | astdb        | asset_valuation     |
| PRIMARY                    | astdb        | assets              |
| PRIMARY                    | astdb        | com_mst             |
| PRIMARY                    | astdb        | com_typ             |
| PRIMARY                    | astdb        | ref_company_type    |
| PRIMARY                    | astdb        | supplier            |
| PRIMARY                    | astdb        | third_party_company |
| third_party_company_ibfk_1 | astdb        | third_party_company |
| PRIMARY                    | astdb        | user                |
| PRIMARY                    | astdb        | user_role           |
+----------------------------+--------------+---------------------+

【讨论】:

【参考方案5】:

查询此代码

select constraint_name,
   table_schema,
   table_name
from   information_schema.table_constraints

你会得到constraint_name,过滤database列表的table_schema。

Look at This

【讨论】:

以上是关于查看整个 MySQL 数据库的所有外键约束的主要内容,如果未能解决你的问题,请参考以下文章

i MySQL 查看约束,添加约束,删除约束

MySQL导入数据库--开启/关闭外键约束

MySQL数据表操作及外键约束

MySQL数据表操作及外键约束

总结: MySQL(基础,字段约束,索引,外键,存储过程,事务)操作语法

MySQL 如何删除有外键约束的表数据