261 mysql foreign-keys
我有一个表,其主键在其他几个表中作为外键引用.例如:
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`)
)
Run Code Online (Sandbox Code Playgroud)
现在,我不知道数据库中有多少表包含X中的外键,如表Y和Z.是否有可用于返回的SQL查询:
Ale*_* N. 375
干得好:
USE information_schema;
SELECT *
FROM
KEY_COLUMN_USAGE
WHERE
REFERENCED_TABLE_NAME = 'X'
AND REFERENCED_COLUMN_NAME = 'X_id';
Run Code Online (Sandbox Code Playgroud)
如果您有多个具有相似表/列名称的数据库,您可能还希望将查询限制为特定数据库:
SELECT *
FROM
KEY_COLUMN_USAGE
WHERE
REFERENCED_TABLE_NAME = 'X'
AND REFERENCED_COLUMN_NAME = 'X_id'
AND TABLE_SCHEMA = 'your_database_name';
Run Code Online (Sandbox Code Playgroud)
小智 59
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 ChildColumnName
FROM
information_schema.KEY_COLUMN_USAGE ke
WHERE
ke.referenced_table_name IS NOT NULL
AND ke.REFERENCED_COLUMN_NAME = 'ci_id' ## Find Foreign Keys linked to this Primary Key
ORDER BY
ke.referenced_table_name;
Run Code Online (Sandbox Code Playgroud)
Pan*_*tis 20
此解决方案不仅会显示所有关系,还会显示约束名称,这在某些情况下是必需的(例如,丢弃约束):
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_usage
WHERE
referenced_table_name IS NOT NULL;
Run Code Online (Sandbox Code Playgroud)
如果要检查特定数据库中的表,请添加以下内容:
AND table_schema = 'database_name';
Run Code Online (Sandbox Code Playgroud)
Seb*_*Seb 14
您可以在明智命名的information_schema表中找到所有与架构相关的信息.
您可能要检查表REFERENTIAL_CONSTRAINTS和KEY_COLUMN_USAGE.前者告诉你哪些表被其他人引用; 后者会告诉你他们的领域是如何相关的.
列出数据库中的所有外键,包括描述
SELECT
i1.CONSTRAINT_NAME, i1.TABLE_NAME,i1.COLUMN_NAME,
i1.REFERENCED_TABLE_SCHEMA,i1.REFERENCED_TABLE_NAME, i1.REFERENCED_COLUMN_NAME,
i2.UPDATE_RULE, i2.DELETE_RULE
FROM
information_schema.KEY_COLUMN_USAGE AS i1
INNER JOIN
information_schema.REFERENTIAL_CONSTRAINTS AS i2
ON i1.CONSTRAINT_NAME = i2.CONSTRAINT_NAME
WHERE i1.REFERENCED_TABLE_NAME IS NOT NULL
AND i1.TABLE_SCHEMA ='db_name';
Run Code Online (Sandbox Code Playgroud)
限制到表中的特定列
AND i1.table_name = 'target_tb_name' AND i1.column_name = 'target_col_name'
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
159672 次 |
| 最近记录: |