您可以使用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