【问题标题】:Constraint detail from information_schema (on update cascade, on delete restrict)来自 information_schema 的约束细节(更新级联,删除限制)
【发布时间】:2012-09-25 21:44:56
【问题描述】:

我需要的关于数据库的几乎所有信息,都可以在 information_schema 中找到

这一次我需要通过单个查询读取数据库中所有外键的详细信息我在 information_schema.key_Column_usage 中找到了所有内容但找不到constraints like on delete, on update

我可以为所有单独的表执行show create table。但是有没有办法通过这样的选择查询来获取这些详细信息?

SELECT CONSTRAINT_NAME, TABLE_NAME,COLUMN_NAME, REFERENCED_TABLE_NAME, 
REFERENCED_COLUMN_NAME FROM information_schema.`KEY_COLUMN_USAGE` WHERE 
table_schema = 'mydbname' AND referenced_column_name IS NOT NULL

它做得很好,但只是缺少像on delete, on update 这样的约束我怎样才能获得这些值,以便我可以在单个查询中获取有关外键的所有信息?

【问题讨论】:

  • 你试过extra栏目了吗?
  • @njk 在KEY_COLUMN_USAGE中不存在。
  • 存在于columns表中。我曾尝试过,但现在再次查看这些详细信息,但它只包含有关 auto_increment 的信息,而不包含这些约束的任何信息
  • 文档说应该有一个表information_schema.referential_constraints。但我没看到。
  • @Barmar 我意识到我迟到了,但我刚刚检查了一下,referential_constraints 出现在我的 5.6.17 版本上。文档说它是在 5.1.10 中添加的,也许您正在/正在使用旧版本?

标签: mysql foreign-keys constraints information-schema


【解决方案1】:

UPDATE_RULEDELETE_RULE 是你要的东西

这有点太晚了,但它可以帮助别人,这里是解决方案:

SELECT tb1.CONSTRAINT_NAME, tb1.TABLE_NAME, tb1.COLUMN_NAME,
tb1.REFERENCED_TABLE_NAME, tb1.REFERENCED_COLUMN_NAME, tb2.MATCH_OPTION,

tb2.UPDATE_RULE, tb2.DELETE_RULE

FROM information_schema.`KEY_COLUMN_USAGE` AS tb1
INNER JOIN information_schema.REFERENTIAL_CONSTRAINTS AS tb2 ON
tb1.CONSTRAINT_NAME = tb2.CONSTRAINT_NAME
WHERE table_schema = 'sfa' AND referenced_column_name IS NOT NULL

【讨论】:

  • 正是我所要求的,并且会对其他人有所帮助
  • 您应该使用“ON tb1.CONSTRAINT_NAME = tb2.CONSTRAINT_NAME AND tb1.TABLE_SCHEMA = tb2.CONSTRAINT_SCHEMA AND tb1.TABLE_NAME = tb2.TABLE_NAME”作为约束名称不是唯一的
【解决方案2】:

更新information_schema.REFERENTIAL_CONSTRAINTS添加到mysql 5.1mysql-5.1我们可以得到所有约束的信息**。接受的答案作为查询给出了解决方案。

之前 在mysql 5.1之前,如mysql-5.0,我们无法获取这些信息,我们只能对单个表使用show create table

【讨论】:

    【解决方案3】:

    如果您正在寻找 (primary|foreign|unique) 键:

    http://dev.mysql.com/doc/refman/5.5/en/table-constraints-table.html

    【讨论】:

    • 感谢您的回复。据我所知,On delete and on updateforeign key constraints 一起使用,例如ON DELETE CASCADE。触发器的语法类似于 BEFORE DELETEAFTER UPDATE 而不是 on update。我只是在寻找与外键一起使用的ON UPDATE and ON DELETEreferential integrity constraints
    【解决方案4】:

    现在,您可以在表 INFORMATION_SCHEMA.REFERENTIAL_CONSTRAINTS 中找到外键约束的详细信息

    http://dev.mysql.com/doc/refman/5.5/en/referential-constraints-table.html

    【讨论】:

      猜你喜欢
      • 2014-01-17
      • 2011-02-24
      • 1970-01-01
      • 1970-01-01
      • 2012-05-08
      • 1970-01-01
      • 1970-01-01
      • 2019-12-24
      相关资源
      最近更新 更多