Mysql 信息模式中的约束详细信息(更新级联、删除约束)
几乎所有我需要的关于数据库的信息,我都可以在信息模式中找到 这一次,我需要通过一次查询来阅读数据库中所有外键的详细信息,我在information\u schema.key\u Column\u用法中找到了所有内容,但找不到诸如on delete、on update等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
约束
我可以为所有单独的表执行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”对于连接,因为约束名称不唯一