MySQL 查看数据库中有主外键关系的表信息 2

本文提供了一段SQL脚本,用于查询数据库中外键约束的详细信息,包括约束名、更新和删除规则等,并解释了不同规则的具体含义。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

转载自:http://blog.itpub.net/28602568/viewspace-1711771/
SQL:
     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 ;       

UPDATE/DELETE_RULE 类型:
  1 .   CASCADE :   从父表中删除或更新对应的行   同时自动的删除或更新自表中匹配的行   ON   DELETE   CANSCADE和ON   UPDATE   CANSCADE都被InnoDB所支持  
  2 .   SET   NULL :   从父表中删除或更新对应的行   同时将子表中的外键列设为空   注意   这些在外键列没有被设为NOT   NULL时才有效   ON   DELETE   SET   NULL和ON   UPDATE   SET   SET   NULL都被InnoDB所支持  
   3 .   NO   ACTION :   InnoDB拒绝删除或者更新父表  
   4 .   RESTRICT :   拒绝删除或者更新父表   指定RESTRICT   或者NO   ACTION   和忽略ON   DELETE或者ON   UPDATE选项的效果是一样的  
  5 .   SET   DEFAULT :   InnoDB目前不支持  

表信息参考列表:
### 如何查看 MySQL 数据库中的外键设置 在 MySQL 中,可以通过查询 `information_schema` 数据库下的 `KEY_COLUMN_USAGE` 来获取关于外键的信息。以下是具体方法: #### 查询外键设置的方法 可以执行以下 SQL 语句来检索指定数据库中所有的外键信息: ```sql SELECT TABLE_NAME, COLUMN_NAME, CONSTRAINT_NAME, REFERENCED_TABLE_NAME, REFERENCED_COLUMN_NAME FROM INFORMATION_SCHEMA.KEY_COLUMN_USAGE WHERE REFERENCED_TABLE_NAME IS NOT NULL AND TABLE_SCHEMA = 'your_database_name'; ``` 上述查询会返回当前数据库中所有的外键约束及其相关信息[^1]。 - **TABLE_NAME**: 外键所在的名。 - **COLUMN_NAME**: 被定义为外键的列名。 - **CONSTRAINT_NAME**: 外键约束的名字。 - **REFERENCED_TABLE_NAME**: 主(被引用的)名称。 - **REFERENCED_COLUMN_NAME**: 主中对应的列名。 如果需要针对某个特定的进行查询,则可以在 WHERE 子句中进一步限定条件,例如: ```sql WHERE TABLE_NAME = 'specific_table_name' AND REFERENCED_TABLE_NAME IS NOT NULL; ``` #### 示例代码 假设有一个名为 `test_db` 的数据库以及一张名为 `orders` 的,想要了解该上的所有外键配置情况,可运行如下命令: ```sql SELECT TABLE_NAME AS ForeignKeyTable, COLUMN_NAME AS ForeignKeyColumn, CONSTRAINT_NAME AS ConstraintName, REFERENCED_TABLE_NAME AS ReferenceTable, REFERENCED_COLUMN_NAME AS ReferenceColumn FROM INFORMATION_SCHEMA.KEY_COLUMN_USAGE WHERE TABLE_SCHEMA='test_db' AND TABLE_NAME='orders' AND REFERENCED_TABLE_NAME IS NOT NULL; ``` 此操作能够帮助管理员快速定位并理解不同格之间的关联关系。 --- #### 注意事项 当遇到错误提示类似于 “Can't open and lock privilege tables” 或者其他权限相关问题时,请确认已具备足够的访问权利去读取 system views 和 metadata information[^2]。另外,在调整全局变量或者修改密码过程中也需谨慎处理以免影响正常服务功能[^3]。 最后值得注意的是随着版本更新可能会引入新的特性支持更复杂的字符集匹配逻辑比如基于最新版 Unicode 标准的数据升级项目(WL#9479)[^4], 这对于国际化应用尤为重要.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值