弄清楚表格是否在CASCADE上有DELETE

时间:2012-10-30 08:07:36

标签: mysql database cascading-deletes

我是否可以知道某个数据库是否有DELETE ON CASCADE查询?

2 个答案:

答案 0 :(得分:24)

是。只需查询INFORMATION_SCHEMA

即可
SELECT * FROM information_schema.REFERENTIAL_CONSTRAINTS

或更具体地说

-- This query will list all constraints, their delete rule, 
-- the constraint table/column list, and the referenced table
SELECT 
  r.CONSTRAINT_NAME,
  r.DELETE_RULE, 
  r.TABLE_NAME,
  GROUP_CONCAT(k.COLUMN_NAME SEPARATOR ', ') AS `constraint columns`,
  r.REFERENCED_TABLE_NAME
FROM information_schema.REFERENTIAL_CONSTRAINTS r
  JOIN information_schema.KEY_COLUMN_USAGE k
  USING (CONSTRAINT_CATALOG, CONSTRAINT_SCHEMA, CONSTRAINT_NAME)
-- using MySQL's GROUP BY clause. In other DB's more columns would need to be
-- specified!
GROUP BY r.CONSTRAINT_CATALOG,
         r.CONSTRAINT_SCHEMA,
         r.CONSTRAINT_NAME

详细了解REFERENTIAL_CONSTRAINTS table in the manual

答案 1 :(得分:9)

您可以使用

SHOW CREATE TABLE `tablename`

获取表格的完整定义。这包括任何外键约束。