我想删除一张表,但是它被一个或多个其他表所引用。如何找出哪些表正在引用这个表,而不必逐个查看数据库中的每个表?
我想删除一张表,但是它被一个或多个其他表所引用。如何找出哪些表正在引用这个表,而不必逐个查看数据库中的每个表?
SELECT TABLE_NAME
FROM information_schema.KEY_COLUMN_USAGE
WHERE TABLE_SCHEMA = 'your_schema_name'
AND REFERENCED_TABLE_NAME = 'your_table_name';
这个有效。
select table_name
from information_schema.referential_constraints
where referenced_table_name = 'parent table here';
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`
使用Toad加载它,您可以通过图表查看引用。还要确保您没有任何应用程序代码从前端传递SQL,删除表可能会导致应用程序崩溃。
下载链接 http://www.toadsoft.com/toadmysql/FreewareDownload.htm
如果您正在使用innoDB,请尝试使用此命令:SHOW TABLE STATUS FROM yourdatabasename LIKE 'T' http://dev.mysql.com/doc/refman/5.1/en/show-table-status.html
查看 information_schema 模式下的 KEY_COLUMN_USAGE 表。
从mysql命令行:
show table status