2012-10-04 12 views
2

几乎所有的信息,我可以在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 

它做的工作很好,但就像on delete, on update缺少限制,我怎样才能得到这些值,这样我可以得到有关外键的信息在一个单一的查询?

+0

您是否尝试过'extra'列? – Kermit

+0

@njk它不存在于'KEY_COLUMN_USAGE'中。 – Sami

+0

它存在于列表中。我已经尝试过了,但现在再次查看了这些细节,但它只包含有关auto_increment的信息,而不是针对这些约束的信息 – Sami

回答

7

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 
+0

正是我问及会有帮助别人 – Sami

+1

您应该使用“ON tb1.CONSTRAINT_NAME = tb2.CONSTRAINT_NAME AND tb1.TABLE_SCHEMA = tb2.CONSTRAINT_SCHEMA AND tb1.TABLE_NAME = tb2.TABLE_NAME” 为JOIN作为约束名称不唯一 – Tarsis

0

如果你正在寻找(主要|国外|唯一的)键:

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

+0

感谢您的回复。在我知道的地方,'On delete and on update'用于'外键约束',例如'删除级联“。触发器的语法类似于“BEFORE DELETE”或“AFTER UPDATE”,而不是“on update”。我只是在寻找'ON UPDATE和ON DELETE'其与外键'引用完整性constraints' – Sami

+0

使用你是对的,只是一个错误;-) – psadac

0

编辑:information_schema.REFERENTIAL_CONSTRAINTS在早期版本的MySQL中是不存在的时候有人问。现在答案是肯定的,你可以得到关于所有限制的信息。接受的答案给解决方案作为查询。

原来的答案:抱歉,您不能获得所需的从INFORMATION_SCHEMA细节,你必须依靠show create table为每个表Here是所有关于它MySQL提供了你,你只能看到显示创建表的建议,看看外键外键细节。你可以看看,但没有再次。现在

相关问题