为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

翻翻过去那场雪 2019-08-06 13:34:30
如何查找具有引用特定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查询:包含外键到X的表的列表和哪些表实际上在外键中有值
查看完整描述

3 回答

?
慕神8447489

TA贡献1780条经验 获得超1个赞

干得好:

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';


查看完整回答
反对 回复 2019-08-06
?
陪伴而非守候

TA贡献1757条经验 获得超8个赞

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;


查看完整回答
反对 回复 2019-08-06
?
萧十郎

TA贡献1815条经验 获得超11个赞

此解决方案不仅会显示所有关系,还会显示约束名称,这在某些情况下是必需的(例如,丢弃约束):

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';


查看完整回答
反对 回复 2019-08-06
  • 3 回答
  • 0 关注
  • 534 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信