您可以使用INFORMATION_SCHEMA
此:
SELECT
*
FROM
INFORMATION_SCHEMA.TABLE_CONSTRAINTS
WHERE
CONSTRAINT_TYPE='FOREIGN KEY'
可能類型的約束可能是:
PRIMARY KEY
主鍵
FOREIGN KEY
外鍵
UNIQUE
唯一約束
所以你有興趣FOREIGN KEY
類型。這將向您顯示哪個列上有哪個表約束,但不會顯示目標約束列和表。爲了找到它們,你需要使用另一個表,INFORMATION_SCHEMA.REFERENTIAL_CONSTRAINTS
其中有這樣的信息,所以,基本上,重建表之間的關係,你需要:
SELECT
t.TABLE_SCHEMA,
t.TABLE_NAME,
r.REFERENCED_TABLE_NAME
FROM
INFORMATION_SCHEMA.TABLE_CONSTRAINTS AS t
JOIN INFORMATION_SCHEMA.REFERENTIAL_CONSTRAINTS AS r
ON t.CONSTRAINT_NAME=r.CONSTRAINT_NAME
WHERE
t.CONSTRAINT_TYPE='FOREIGN KEY'
但是,這再次丟失列(因爲它不屬於這些表),並將通過表間的FK顯示只有關係。爲了重建完整的關係(即涉及列),你需要參考KEY_COLUMN_USAGE
表:
SELECT
TABLE_SCHEMA,
TABLE_NAME,
COLUMN_NAME,
REFERENCED_TABLE_SCHEMA,
REFERENCED_TABLE_NAME,
REFERENCED_COLUMN_NAME
FROM
INFORMATION_SCHEMA.KEY_COLUMN_USAGE
WHERE
REFERENCED_TABLE_SCHEMA IS NOT NULL
此查詢將顯示所有關係,其中引用的實體不爲空,並且,因爲它只在FK情況下是適用的 - 這是尋找FK關係問題的答案。這是非常普遍的,但我提供了上面的方法,因爲它可能對獲取有關PK或唯一約束的信息也很有用。
查看information_schema數據庫,您會在該表中找到一些有用的信息。包括鑰匙。 – 2014-08-28 11:43:21
如果這用於分析您繼承的數據庫,爲什麼不使用SQLYog或類似的可視化工具?把幾周的工作花費幾分鐘。 – 2014-08-28 11:43:37