2011-08-16 94 views
0

我正在編寫一些代碼來檢查MySQL數據庫結構,並需要有關外鍵約束(InnoDB表)的信息。確定沒有information_schema的InnoDB FK約束

有兩種方法,我知道要做到這一點:

  1. 解析的SHOW CREATE TABLE X
  2. 結果使用INFORMATION_SCEMA.REFERENTIAL_CONSTRAINTS

不幸的是方案二需要MySQL 5.1.16或更高版本,所以我除非我能說服我們的服務器人員更新,否則我們不能使用它。儘管我可能不想使用選項1,但感覺很混亂,而且沒有編寫完整的SQL解析器,我不確定我的代碼是否總能工作任何表格。

是否有另一種獲取此信息的方法?

感謝

回答

1

From the MySQL 5.0 manual online

您也可以顯示外鍵約束的表像 這樣:

SHOW TABLE STATUS FROM db_name LIKE 'tbl_name'; 

的外鍵約束中列出評論列的 輸出。


海報表明,這並沒有提供ON UPDATEON DELETE信息,這些信息的外鍵行爲的一個重要組成部分。

另一種選擇:

既然你控制涉及的代碼,是有可能成立另一個MySQL實例中版本5.1+相同的環境?如果是這樣,我們稱這個實例爲虛擬。在實時數據庫上運行SHOW CREATE TABLE。然後,在虛擬上運行DROP TABLE IF EXIST,然後輸入SHOW CREATE TABLE查詢的輸出。

現在您可以使用INFORMATION_SCHEMA上的虛擬數據庫來獲取信息。

+0

謝謝,雖然這並沒有給我'ON UPDATE' /'ON DELETE'信息。 – DaedalusFall

+0

@DaedalusFall:好的。另一個選項如何...更新了答案。 –

+0

哈!尼斯黑客!可悲的是,我無法從我的代碼(安全模式下的PHP)啓動一個mysql實例,並且我認爲我們的服務器人員不會爲我經常運行一個而感到高興。好東西壽。我想我只能等到升級。 – DaedalusFall