当前位置: 首页 > 面试题库 >

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

赵英资
2023-03-14
问题内容

类似于此问题,但适用于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上面的“ ”。



 类似资料:
  • 问题内容: 我正在尝试查询一个MySQL服务器,以确定有关数据库的信息,以支持一些代码。 我已经非常成功地使用 Java JDBC 和 INFORMATION_SCHEMA 表,但是问题是我需要确定表关系是 OneToOne , OneToMany 还是 ManyToMany 。我找不到实现此目标的好方法,如果有人可以帮助我,并且如果有可能使用非特定于MySQL的可靠解决方案来帮助他人,我也很乐意

  • 问题内容: 我想确定我的Java程序正在以编程方式运行的主机的操作系统(例如:我希望能够基于我在Windows还是Unix平台上加载不同的属性)。做到100%可靠性的最安全方法是什么? 问题答案: 你可以使用: PS:你可能会发现此代码有用: 它所做的只是打印出Java实现提供的所有属性。通过它,你可以了解可以通过属性了解Java环境的内容。

  • 问题内容: 如何以编程方式确定我的机器是x86,x64还是IA64? 问题答案: 在Windows系统上,您可以获得环境变量PROCESSOR_ARCHITECTURE。这是MSDN文章,解释了可以返回的值。

  • 问题内容: JFrame与用户按下X关闭按钮或按在Windows上)相同,获得关闭的正确方法是什么? 我通过以下方式设置了我想要的默认关闭操作: 它完全符合我想要的上述控件的功能。这个问题不是关于这个的。 我真正想做的是使GUI的行为与按下X关闭按钮的行为相同。 假设我要扩展,然后通过来添加我的适配器的实例作为侦听器。我想看到的调用相同的序列通过,以及作为将与出现X关闭按钮。可以这么说,撕开窗户与

  • 我的主类扩展了JPanel,我在这个面板上创建了一个表和一个按钮。现在我想在用户按下它时关闭这个面板。在互联网上关闭面板的例子是关于JFrame.JPanel有解决方案吗?

  • 我正在尝试使用设置log4j2以写入日志。我希望以编程方式配置日志记录系统,而不是使用XML文件。 以下是我尝试过的内容(大部分与网站上的文档相同)https://logging.apache.org/log4j/2.x/manual/customconfig.html#Configurator): 我在main方法的开头调用方法。当我运行我的程序时,会创建一个名为的文件,但是所有日志输出都会转到