如何查找具有引用特定table.column的外键并具有这些外键值的所有表?

如何查找具有引用特定table.column的外键并具有这些外键值的所有表?

我有一个表,其主键在其他几个表中作为外键引用。例如:

  CREATE TABLE `X` (
    `X_id` int NOT NULL auto_increment,
    `name` varchar(255) NOT NULL,
    PRIMARY KEY  (`X_id`)
  )
  CREATE TABLE `Y` (
    `Y_id` int(11) NOT NULL auto_increment,
    `name` varchar(255) NOT NULL,
    `X_id` int DEFAULT NULL,
    PRIMARY KEY  (`Y_id`),
    CONSTRAINT `Y_X` FOREIGN KEY (`X_id`) REFERENCES `X` (`X_id`)
  )
  CREATE TABLE `Z` (
    `Z_id` int(11) NOT NULL auto_increment,
    `name` varchar(255) NOT NULL,
    `X_id` int DEFAULT NULL,
    PRIMARY KEY  (`Z_id`),
    CONSTRAINT `Z_X` FOREIGN KEY (`X_id`) REFERENCES `X` (`X_id`)
  )

现在,我不知道数据库中有多少表包含X中的外键,如表Y和Z.是否有可用于返回的SQL查询:

  1. 包含外键到X的表的列表

  2. 和哪些表实际上在外键中有值


翻翻过去那场雪
浏览 542回答 3
3回答

慕神8447489

干得好:USE information_schema;SELECT *FROM   KEY_COLUMN_USAGEWHERE   REFERENCED_TABLE_NAME = 'X'   AND REFERENCED_COLUMN_NAME = 'X_id';如果您有多个具有相似表/列名称的数据库,您可能还希望将查询限制为特定数据库:SELECT *FROM   KEY_COLUMN_USAGEWHERE   REFERENCED_TABLE_NAME = 'X'   AND REFERENCED_COLUMN_NAME = 'X_id'   AND TABLE_SCHEMA = 'your_database_name';

陪伴而非守候

MySQL 5.5参考手册:“InnoDB和FOREIGN KEY约束”SELECT   ke.REFERENCED_TABLE_SCHEMA parentSchema,   ke.referenced_table_name parentTable,   ke.REFERENCED_COLUMN_NAME parentColumnName,   ke.TABLE_SCHEMA ChildSchema,   ke.table_name childTable,   ke.COLUMN_NAME ChildColumnNameFROM   information_schema.KEY_COLUMN_USAGE keWHERE   ke.referenced_table_name IS NOT NULL   AND ke.REFERENCED_COLUMN_NAME = 'ci_id' ## Find Foreign Keys linked to this Primary KeyORDER BY   ke.referenced_table_name;

萧十郎

此解决方案不仅会显示所有关系,还会显示约束名称,这在某些情况下是必需的(例如,丢弃约束):SELECT     CONCAT(table_name, '.', column_name) AS 'foreign key',     CONCAT(referenced_table_name, '.', referenced_column_name) AS 'references',     constraint_name AS 'constraint name'FROM     information_schema.key_column_usageWHERE     referenced_table_name IS NOT NULL;如果要检查特定数据库中的表,请添加以下内容:AND table_schema = 'database_name';
打开App,查看更多内容
随时随地看视频慕课网APP