我的问题是外键。例如,我们有表X和X_PK,表A,B,C有空A_FK_X和空B_FK_X。表C不包含表X的FK。表A已经初始化了A_FK_X的记录,但表B没有。
是否可以在所有表中找到指定X_PK的所有用法?
答案 0 :(得分:1)
您想使用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
的引用的数据库,但输出将根据您的数据库/表结构而有所不同。
答案 1 :(得分:1)
您可以进行以下查询:
选择constraint_schema,constraint_name,table_name,column_name,referenced_table_name,referenced_column_name
来自information_schema.key_column_usage