1

我的问题是关于外键的。例如,我们有带有 X_PK 的表 X 和带有空 A_FK_X 和空 B_FK_X 的表 A、B、C。表 C 不包含表 X 的 FK。表 A 已经具有初始化 A_FK_X 的记录,但表 B 没有。

是否可以在所有表​​中找到指定 X_PK 的所有用法?

4

2 回答 2

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,但输出会因您的数据库/表结构而异。

于 2012-07-26T10:57:01.977 回答
1

您可以进行以下查询:

选择约束模式、约束名、表名、列名、引用表名、引用列名information_schema.key_column_usage

于 2012-07-26T11:48:43.860 回答