我想删除一个表,但它被一个或多个其他表引用。如何找出哪些表正在引用该表,而不必一一查看数据库中的每个表?
seppy
问问题
32742 次
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
于 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 回答