2011-05-20 201 views
2

我需要检查模式上的外键约束。我需要表名,列名,引用模式,引用表和引用列。谷歌搜索告诉我,我可以使用information_schema来做到这一点。我对这种方法有些怀疑。检查外键约束MySQL

  1. 信息模式可靠吗?我有太多包含太多表的大型数据库,并且任何错误代价都很高
  2. 考虑到information_schema是一个系统数据库并包含有关所有数据库的信息,任何查询都将花费相当长的时间。对?

是否有替代方法来检查外键约束?使用SHOW CREATE TABLE和比较查询似乎不是一个好主意。

我的应用程序将以C#(Connector:ODBC)编码。我知道有一个.NET MySQL连接器为getschema方法提供了Foreign Key Columns集合(http://dev.mysql.com/doc/refman/5.0/en/connector-net-programming-connecting-connection-string。 HTML#连接网编程-的getSchema)。有谁知道它是否也使用了information_schema?

我真的可以在这里使用一些帮助。

问候,

+0

你使用InnoDB或myisam? – 2011-05-20 07:25:05

+0

使用'information_schema'。我想'SHOW CREATE TABLE'或者其他任何方式都会使用'information_schema'中的信息。 – 2011-05-20 07:34:50

+0

检查此问题:http://stackoverflow.com/questions/111129/is-querying-the-mysql-information-schema-database-a-good-way-to-find-related-tabl – 2011-05-20 07:38:29

回答

1

是信息架构可靠吗?

如果不是,您的数据库也不是。 (提示:itisn't)。

考虑到information_schema是一个系统数据库,包含有关所有数据库的信息,任何查询将花费相当长的时间。对?

这取决于你如何查询它们。尝试show indexes查看可用索引。

是否有替代方法来检查外键约束?使用SHOW CREATE TABLE和比较查询似乎不是一个好主意。

理论上,show create table以稍微不同的方式查询information_schema。

在实践中,并引用第二环节进一步上涨,一些两者之间返回的信息可能是不一致的:

create table rolando (num int not null, primary key (num) using hash); 

mysql> show create table rolando\G 
    (...) 
    PRIMARY KEY (`num`) USING HASH 

mysql> show indexes from rolando; 
(...) | Index_type | (...) 
(...) | BTREE  | (...) 

最后,请参阅:

Is querying the MySQL information_schema database a good way to find related tables?