44

我想删除一个表,但它被一个或多个其他表引用。如何找出哪些表正在引用该表,而不必一一查看数据库中的每个表?

4

8 回答 8

89
SELECT TABLE_NAME
FROM information_schema.KEY_COLUMN_USAGE
WHERE TABLE_SCHEMA = 'your_schema_name'
      AND REFERENCED_TABLE_NAME = 'your_table_name';

这行得通。

于 2009-04-16T02:58:12.960 回答
6
select table_name 
from information_schema.referential_constraints 
where referenced_table_name = 'parent table here';
于 2009-04-16T02:38:25.193 回答
1

如果您安装了phpMyAdmin,则可以使用其设计器功能来可视化表关系。

在此处输入图像描述

要使用设计器,请选择一个数据库,然后查找“设计器”选项卡。

于 2017-12-29T23:01:32.533 回答
-1

使用 Toad 加载它,您可以通过图表查看参考。还要确保您没有任何应用程序代码从前端传递 sql,删除表可能会导致应用程序中断。

下载链接 http://www.toadsoft.com/toadmysql/FreewareDownload.htm

如果您使用的是innoDB,请尝试从您的数据库名称中显示表状态,例如“T” http://dev.mysql.com/doc/refman/5.1/en/show-table-status.html

于 2009-04-16T02:21:52.550 回答
-1

查看 iformation_schema 模式中的 KEY_COLUMN_USAGE 表。

于 2009-04-16T02:58:26.550 回答
-1

从 mysql 命令行:显示表状态

于 2009-04-16T03:04:19.343 回答
-1

你可以试试 MySql 工作台,它可以让你提取 ER 图。在这里,您可以找到有关数据库表的所有信息。

于 2017-01-12T09:56:11.073 回答
-1

如果您还想要引用的特定列,请使用以下查询。

SELECT 
ku.CONSTRAINT_NAME AS "Foreign key",
CONCAT("`", ku.TABLE_SCHEMA, "`.`", ku.TABLE_NAME, "`") AS "In",
GROUP_CONCAT(ku.COLUMN_NAME) AS "Source column",
CONCAT("`", ku.REFERENCED_TABLE_SCHEMA, "`.`", ku.REFERENCED_TABLE_NAME, "`") AS 
"References",
GROUP_CONCAT(ku.REFERENCED_COLUMN_NAME) AS "Target column"
FROM information_schema.KEY_COLUMN_USAGE AS ku
WHERE ku.REFERENCED_TABLE_SCHEMA = '[THE_CURRENT_SELECTED_SCHEMA_NAME]'
AND ku.REFERENCED_TABLE_NAME = '[THE_CURRENT_SELECTED_TABLE_NAME]'
GROUP BY ku.CONSTRAINT_NAME
HAVING `In` != `References`

在此处输入图像描述

于 2021-09-21T05:29:03.340 回答