检查外键约束MySQL

时间:2011-05-20 07:21:04

标签: c# mysql foreign-keys

我需要检查模式上的外键约束。我需要表名,列名,引用的模式,引用的表和引用的列。 Google搜索告诉我,我可以使用information_schema执行此操作。我对这种方法有些怀疑。

  1. 信息架构是否可靠?我有太多的大型数据库包含太多的表,任何错误都会很昂贵
  2. 考虑到information_schema是一个系统数据库并包含有关所有数据库的信息,任何查询都需要相当长的时间。正确?
  3. 是否有其他方法可以检查外键约束?使用SHOW CREATE TABLE和比较查询似乎不是一个好主意。

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

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

    此致

1 个答案:

答案 0 :(得分:1)

  

信息架构是否可靠?

如果不是,那么您的数据库也不是。 (提示:it isn'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?