【问题标题】:Figure out if a table has a DELETE on CASCADE确定表是否在 CASCADE 上有 DELETE
【发布时间】:2012-10-19 13:14:24
【问题描述】:

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

【问题讨论】:

    标签: mysql database cascading-deletes


    【解决方案1】:

    是的。只需查询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

    【讨论】:

    • 如果您有不同的方案,您可以添加 WHERE r.CONSTRAINT_SCHEMA='schema_name' 以仅显示该方案的约束。
    【解决方案2】:

    你可以使用

    SHOW CREATE TABLE `tablename`
    

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

    【讨论】:

      猜你喜欢
      • 2012-02-09
      • 2014-09-02
      • 2020-12-19
      • 1970-01-01
      • 1970-01-01
      • 2014-02-14
      • 2012-11-10
      • 1970-01-01
      • 2018-12-16
      相关资源
      最近更新 更多