如何查找具有引用特定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';
陪伴而非守候
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;
萧十郎
TA贡献1815条经验 获得超13个赞
此解决方案不仅会显示所有关系,还会显示约束名称,这在某些情况下是必需的(例如,丢弃约束):
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';
添加回答
举报
0/150
提交
取消