MySQL:如何以编程方式确定外键关系?

类似于这个问题,但对于MySQL ….

如何以编程方式确定MySQL中的外键引用(假设InnoDB)? 我几乎可以得到它们:

SHOW TABLE STATUS WHERE Name = 'MyTableName'; 

…但是,似乎包含一些此信息的注释列被截断,所以我不能依赖它。 必须有其他方式……

我对C API调用,SQL语句,任何事情感到满意 – 我只需要一些能够持续工作的东西。

注意:我还考虑过解析“SHOW CREATE TABLE MyTableName”语句的结果,但我真的希望有更简单的东西。

您可以查询两个表来获取此信息: INFORMATION_SCHEMA.TABLE_CONSTRAINTSINFORMATION_SCHEMA.KEY_COLUMN_USAGE

以下是上面链接的后一页上的评论的查询,其中演示了如何获取您寻求的信息。

 SELECT CONCAT( table_name, '.', column_name, ' -> ', referenced_table_name, '.', referenced_column_name ) AS list_of_fks FROM INFORMATION_SCHEMA.key_column_usage WHERE referenced_table_schema = 'test' AND referenced_table_name IS NOT NULL ORDER BY table_name, column_name; 

使用您的架构名称而不是上面的’ test ‘。

在这里,您对@bill解决方案有一些改进:

 SELECT CONSTRAINT_SCHEMA AS db, CONCAT ( TABLE_NAME, '.', COLUMN_NAME, ' -> ', REFERENCED_TABLE_NAME, '.', REFERENCED_COLUMN_NAME ) AS relationship FROM INFORMATION_SCHEMA.KEY_COLUMN_USAGE WHERE REFERENCED_TABLE_NAME = 'your_table_name' ORDER BY CONSTRAINT_SCHEMA, TABLE_NAME, COLUMN_NAME; 

在这种情况下,我通过与“your_table_name”字段的关系进行过滤,并查看关系来自哪个数据库。

尝试INFORMATION_SCHEMA.REFERENTIAL_CONSTRAINTS

 SELECT TABLE_NAME, COLUMN_NAME, CONSTRAINT_NAME, REFERENCED_TABLE_NAME, REFERENCED_COLUMN_NAME FROM INFORMATION_SCHEMA.KEY_COLUMN_USAGE WHERE REFERENCED_TABLE_NAME = 'table_name' AND TABLE_SCHEMA = 'table_schema';