使用 PHP 确定另一个 table 的外键引用的 table 的名称?

Determine name of table referenced by a foreign key from another table using PHP?

刚刚学习 mysql 和 php 并且必须为我的考试创建一个测试项目。

如何确定来自另一个 table(源)引用的 table(目标)外键的名称,我将如何使用 PHP 来解决这个问题?

我已经用谷歌搜索这个以及浏览 SO 几个小时了,但没有找到可行的解决方案。

编辑:我发现我需要更精确。我想查看 table A 中的外键列定义并找出它在我的数据库中引用的其他 table,所有这些都不知道引用的 table 的名称。当 table A 为空时,我也希望它能工作。所以我想我不知何故需要访问 table A 的定义/描述(方案?),查看存储在那里的外键列的内容,然后确定目标 table。

示例:

我有一个 table“产品”(来源)和一个 table“制造商”(目标)。

“产品”有一列“制造商”,它是引用“制造商”的外键。

现在我想创建一些 php 代码来查看 table“产品”的“制造商”列,并发现存储在该列中的外键将引用 table “制造商”。所有这一切都没有 php 事先知道引用的 table。如果 table“产品”为空,即不包含任何外键值,这也应该有效。

所以任何 SQL 查询已经要求我输入引用的 table 的名字对我来说似乎毫无意义。

我试过了

CREATE TABLE manufacturers (
    id INTEGER PRIMARY KEY,
    name VARCHAR(100)
    );

CREATE TABLE products (
    id INTEGER PRIMARY KEY,
    name VARCHAR(100),
    manufacturer INTEGER
    );

ALTER TABLE products ADD FOREIGN KEY(manufacturer) REFERENCES manufacturers(id);

SELECT TABLE_NAME,
       COLUMN_NAME,
       REFERENCED_TABLE_NAME
FROM INFORMATION_SCHEMA.KEY_COLUMN_USAGE
WHERE TABLE_SCHEMA = DATABASE()
  AND TABLE_NAME = "products"
  AND REFERENCED_TABLE_NAME IS NOT NULL;

但是结果是空的。

编辑 2:

我发现 INFORMATION_SCHEMA.KEY_COLUMN_USAGE 在我的整个 sql 安装中不存在。或者至少我无处可见。

编辑 3:

我发现了我的错误。我必须指定我的实际数据库名称,而不是“DATABASE()”。

感谢大家的帮助。 :)

SELECT CONSTRAINT_SCHEMA,
       CONSTRAINT_NAME,
       TABLE_SCHEMA,
       TABLE_NAME,
       COLUMN_NAME,
       REFERENCED_TABLE_SCHEMA,
       REFERENCED_TABLE_NAME,
       REFERENCED_COLUMN_NAME
FROM INFORMATION_SCHEMA.KEY_COLUMN_USAGE
WHERE TABLE_SCHEMA = slave_database
  AND TABLE_NAME = slave_table
  AND REFERENCED_TABLE_NAME IS NOT NULL;

The INFORMATION_SCHEMA KEY_COLUMN_USAGE Table


I want to look at a foreign key in table A and find out which other table in my database it references without knowing that table's name.

什么问题?完全一样:

SELECT CONSTRAINT_SCHEMA,
       CONSTRAINT_NAME,
       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 = main_database
  AND REFERENCED_TABLE_NAME = main_table;