Mysql 信息模式中的约束详细信息(更新级联、删除约束)

Mysql 信息模式中的约束详细信息(更新级联、删除约束),mysql,foreign-keys,constraints,information-schema,Mysql,Foreign Keys,Constraints,Information Schema,几乎所有我需要的关于数据库的信息,我都可以在信息模式中找到 这一次,我需要通过一次查询来阅读数据库中所有外键的详细信息,我在information\u schema.key\u Column\u用法中找到了所有内容,但找不到诸如on delete、on update等约束 我可以为所有单独的表执行show create table。但是有没有办法通过这样的select查询获得这些详细信息 SELECT CONSTRAINT_NAME, TABLE_NAME,COLUMN_NAME, REFERE

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

这一次,我需要通过一次查询来阅读数据库中所有外键的详细信息,我在information\u schema.key\u Column\u用法中找到了所有内容,但找不到诸如on delete、on update等
约束

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

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
这项工作做得很好,但只是缺少了一些约束,如删除时的
、更新时的
,如何才能同时获得这些值,以便在一次查询中获得有关外键的所有信息?

如果您正在寻找(主外键|唯一)键:


编辑:
信息模式。在提出问题时,早期版本的mysql中不存在引用约束。现在答案是肯定的,您可以获得有关所有约束的信息。接受的答案作为查询给出解决方案


原始答案:很抱歉,您无法从信息模式中获得所需的详细信息,您必须依赖于
show create table
,因为每个表都是mysql提供给您的外键,您只能看到show create table,建议您查看外键详细信息。现在,您可以在表信息\u SCHEMA.REFERENTIAL\u CONSTRAINTS中找到外键约束的详细信息


UPDATE\u RULE
DELETE\u 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

您是否尝试过
extra
列?@njk它不存在于
KEY\u column\u USAGE
中。它存在于columns表中。我已经尝试过了,但现在再次查看了这些详细信息,但它只包含有关自动增量的信息,而不包含这些约束的任何信息。文档说明应该有一个表
信息模式。参考约束
。但我没看到。@Barmar我意识到我参加聚会迟到了,但我只是检查了一下,
referential\u约束为我显示在5.6.17版上。文档说它是在5.1.10中添加的,也许你使用的是旧版本?谢谢你的回复。据我所知,删除时的
和更新时的
外键约束一起使用
,例如,删除级联时的
。触发器的语法类似于删除之前的
或更新之后的
,而不是更新时的
。我只是在寻找更新时的
和删除时的
,它们与外键一起用作
引用完整性约束
正是我所要求的,并且对其他约束有帮助您应该使用“ON tb1.CONSTRAINT_NAME=tb2.CONSTRAINT_NAME和tb1.TABLE_SCHEMA=tb2.CONSTRAINT_SCHEMA和tb1.TABLE_NAME=tb2.TABLE_NAME”对于连接,因为约束名称不唯一