2011-05-20 203 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?