来自information_schema的约束细节(在更新级联上,关于删除限制)

Sam*_*ami 4 mysql constraints foreign-keys information-schema

几乎我所需要的关于数据库的所有信息,我都可以在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
Run Code Online (Sandbox Code Playgroud)

它正在完成这项工作,但只是缺少约束,例如on delete, on update我如何获得这些值,以便我可以在单个查询中获取有关外键的所有信息?

Wil*_*ier 9

UPDATE_RULE而且DELETE_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
Run Code Online (Sandbox Code Playgroud)

  • 您应该使用"ON tb1.CONSTRAINT_NAME = tb2.CONSTRAINT_NAME AND tb1.TABLE_SCHEMA = tb2.CONSTRAINT_SCHEMA和tb1.TABLE_NAME = tb2.TABLE_NAME"作为JOIN,因为约束名称不是唯一的 (2认同)