我的问题是关于外键的。例如,我们有带有 X_PK 的表 X 和带有空 A_FK_X 和空 B_FK_X 的表 A、B、C。表 C 不包含表 X 的 FK。表 A 已经具有初始化 A_FK_X 的记录,但表 B 没有。
是否可以在所有表中找到指定 X_PK 的所有用法?
我的问题是关于外键的。例如,我们有带有 X_PK 的表 X 和带有空 A_FK_X 和空 B_FK_X 的表 A、B、C。表 C 不包含表 X 的 FK。表 A 已经具有初始化 A_FK_X 的记录,但表 B 没有。
是否可以在所有表中找到指定 X_PK 的所有用法?
你想使用information_schema
数据库。试试这段代码(尽管CREATE TABLE
语句过于简单):
CREATE TABLE `X` (
`X_id` INT NOT NULL AUTO_INCREMENT,
PRIMARY KEY (`X_id`)
);
CREATE TABLE `A` (
`A_id` INT NOT NULL AUTO_INCREMENT,
`X_id` INT NULL,
PRIMARY KEY (`A_id`),
CONSTRAINT `A_FK_X` FOREIGN KEY (`X_id`) REFERENCES `X` (`X_id`)
);
CREATE TABLE `B` (
`B_id` INT NOT NULL AUTO_INCREMENT,
`X_id` INT NULL,
PRIMARY KEY (`B_id`),
CONSTRAINT `B_FK_X` FOREIGN KEY (`X_id`) REFERENCES `X` (`X_id`)
);
CREATE TABLE `C` (
`C_id` INT NOT NULL AUTO_INCREMENT,
PRIMARY KEY (`C_id`)
);
USE information_schema;
SELECT * FROM KEY_COLUMN_USAGE WHERE REFERENCED_TABLE_NAME = 'X' AND REFERENCED_COLUMN_NAME = 'X_id';
这将返回X_id
每个数据库中的所有引用,因此您可以通过包含以下内容来缩小搜索范围TABLE_SCHEMA
:
SELECT * FROM KEY_COLUMN_USAGE WHERE REFERENCED_TABLE_NAME = 'X' AND REFERENCED_COLUMN_NAME = 'X_id' AND TABLE_SCHEMA='testdbname';
在我的系统上,这些返回相同的输出,因为我只有一个包含对 的引用的数据库X_id
,但输出会因您的数据库/表结构而异。
您可以进行以下查询:
选择约束模式、约束名、表名、列名、引用表名、引用列名information_schema.key_column_usage