当前位置:  开发笔记 > 后端 > 正文

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

如何解决《MySQL:如何以编程方式确定外键关系?》经验,为你挑选了2个好方法。

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

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

SHOW TABLE STATUS WHERE Name = 'MyTableName';

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

我很满意C API调用,SQL语句,任何东西 - 我只需要一些能够持续工作的东西.

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



1> Bill Karwin..:

您可以查询两个表来获取此信息: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上面的' '.



2> 小智..:

在这里,您对@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"字段的关系进行过滤,并查看关系来自哪个数据库.

推荐阅读
夏晶阳--艺术
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有