如何在 mysql 5.0 中查找对表的依赖关系?

use*_*643 11 mysql mysql-5.0

我试图在 MySQL 中删除一个表,但它抱怨“无法删除或更新父行:外键约束失败”......

问题

  • 有没有办法找出所有表依赖项和依赖它的对象?
  • 对于 Sybase,DBArtisan 提供了一种非常简单的方法来查找依赖项。MySQL有没有这样的工具?

Rol*_*DBA 6

从 MySQL 5.0 开始,您可以检查的一个地方是information_schema.table_constraints

例如,要获取给定表 (mydb.mytable) 的外键关系数,请运行以下命令:

SELECT COUNT(1) FROM information_schema.table_constraints
WHERE table_schema = 'mydb'
AND table_name = 'mytable'
AND constraint_type='FOREIGN KEY';
Run Code Online (Sandbox Code Playgroud)

从 MySQL 5.1 开始,您还可以使用information_schema.referential_constraints。这是表格布局:

mysql> show create table information_schema.referential_constraints\G
*************************** 1. row ***************************
       Table: REFERENTIAL_CONSTRAINTS
Create Table: CREATE TEMPORARY TABLE `REFERENTIAL_CONSTRAINTS` (
  `CONSTRAINT_CATALOG` varchar(512) DEFAULT NULL,
  `CONSTRAINT_SCHEMA` varchar(64) NOT NULL DEFAULT '',
  `CONSTRAINT_NAME` varchar(64) NOT NULL DEFAULT '',
  `UNIQUE_CONSTRAINT_CATALOG` varchar(512) DEFAULT NULL,
  `UNIQUE_CONSTRAINT_SCHEMA` varchar(64) NOT NULL DEFAULT '',
  `UNIQUE_CONSTRAINT_NAME` varchar(64) DEFAULT NULL,
  `MATCH_OPTION` varchar(64) NOT NULL DEFAULT '',
  `UPDATE_RULE` varchar(64) NOT NULL DEFAULT '',
  `DELETE_RULE` varchar(64) NOT NULL DEFAULT '',
  `TABLE_NAME` varchar(64) NOT NULL DEFAULT '',
  `REFERENCED_TABLE_NAME` varchar(64) NOT NULL DEFAULT ''
) ENGINE=MEMORY DEFAULT CHARSET=utf8
1 row in set (0.01 sec)
Run Code Online (Sandbox Code Playgroud)

只需检查 table_name 和 referenced_table_name 列。