只是学习mysql和php,并且必须为我的考试创建一个测试项目。
如何从另一个表(源)引用中确定表(目标)的名称(外键),以及如何使用PHP来实现这一点?
我已经在谷歌上搜索了几个小时,也浏览了SO,但还没有找到一个有效的解决方案。
编辑:我明白我需要更精确。我想查看表a中的外键列定义,并找出它引用了数据库中的另一个表,而不知道被引用表的名称。我还希望这在表A为空时起作用。因此,我想我需要以某种方式访问表A的定义/描述(scheme?),查看有问题的外键列存储的内容,并以此方式确定目标表。
实例
我有一张“产品”(来源)表和一张“制造商”(目标)表。
“products”有一个列“manufacturer”,这是一个引用“manufactures”的外键。
现在,我想创建一些php代码,查看表“products”的“manufacturers”列,并发现存储在该列中的外键将引用表“manufactures”。所有这些都不需要php事先知道引用的表。如果表“products”为空,即不包含任何外键值,则这也应该有效。
因此,任何已经要求我输入被引用表名称的SQL查询对我来说都毫无意义。
我试过了
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()”。
谢谢你的帮助。:)