在没有 information_schema 的情况下确定 InnoDB FK 约束

发布于 2024-11-29 16:26:37 字数 380 浏览 1 评论 0原文

我正在编写一些代码来检查 MySQL 数据库结构,并且需要有关外键约束(在 InnoDB 表上)的信息。

我知道有两种方法可以做到这一点:

  1. 解析 SHOW CREATE TABLE X 的结果
  2. 使用 INFORMATION_SCEMA.REFERENTIAL_CONSTRAINTS

不幸的是,选项二需要 MySQL 5.1.16 或更高版本,所以我不能使用它,除非/直到我可以说服我们的服务器人员进行更新,虽然我可能可以使用选项 1,但它感觉很混乱,而且如果不编写完整的 SQL 解析器,我也不会觉得确保我的代码始终适用于任何表。

还有其他方法可以获取此信息吗?

谢谢

I'm writing some code to inspect a MySQL database structure, and need information about Foreign Key constraints (on InnoDB tables).

There are two ways I know of to do this:

  1. Parse the results of SHOW CREATE TABLE X
  2. Use INFORMATION_SCEMA.REFERENTIAL_CONSTRAINTS

Unfortunately option two requires MySQL 5.1.16 or later, so I can't use it unless/until I can convince our server guy to update, And while I can probably get away with option 1, it feels messy and without writing a full SQL parser I wouldn't feel sure my code would always work with any table.

Is there another way of getting at this information?

Thanks

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

走走停停 2024-12-06 16:26:38

来自 MySQL 5.0 在线手册

您还可以显示表的外键约束,例如
这个:

SHOW TABLE STATUS FROM db_name LIKE 'tbl_name';

外键约束列在注释列中
输出。


海报表明这不提供 ON UPDATEON DELETE 信息,而这些信息是外键行为的重要组成部分。

另一种选择:

既然您控制了所涉及的代码,是否可以在版本5.1+的同一环境中设置另一个MySQL实例?如果是这样,我们将该实例称为“虚拟”。在实时数据库上运行SHOW CREATE TABLE。然后,在虚拟上运行DROP TABLE IF EXIST,然后运行SHOW CREATE TABLE查询的输出。

现在,您可以在虚拟数据库上使用INFORMATION_SCHEMA来获取信息。

From the MySQL 5.0 manual online:

You can also display the foreign key constraints for a table like
this:

SHOW TABLE STATUS FROM db_name LIKE 'tbl_name';

The foreign key constraints are listed in the Comment column of the
output.


Poster indicates that this doesn't provide ON UPDATE and ON DELETE information which is an important part of foreign key behavior.

Another option:

Since you control the code involved, is it possible to set up another MySQL instance in the same environment which is version 5.1+? If so, let's call that instance dummy. Run the SHOW CREATE TABLE on the live database. Then, on dummy run a DROP TABLE IF EXIST followed by the output from the SHOW CREATE TABLE query.

Now you can use INFORMATION_SCHEMA on the dummy database to get the information.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文