MySQL查看表的外键约束关系
在测试库中需要对一些数据表做清空数据操作时,因为表之间有外键约束,所以,想了解其约束关系,这时可以通过库information_schema的key_column_usage表来查看。
- CONSTRAINT_CATALOG: 约束所属目录的名称,值始终为def
- CONSTRAINT_SCHAME: 约束所属schema(database)名称
- CONSTRAINT_NAME: 约束名称
- TABLE_CATALOG: 表所属目录的名称,值始终为def
- TABLE_SCHEMA: 表所属schema(database)名称
- TABLE_NAME: 具有约束的表的名称
- ORDINAL_POSITION: 列在约束内的位置,而不是列在表中的位置,列位置从1开始
- POSITION_IN_UNIQUE_CONSTRAINT: NULL对于唯一和主键约束,对于外键约束,此列是正在引用的表的键中的序号位置
新建两个测试表test_a和test_b:
CREATE TABLE `test`.`test_a` (
`id` int(0) NOT NULL,
`aa` varchar(255) NULL,
PRIMARY KEY (`id`)
);
CREATE TABLE `test`.`test_b` (
`id` int(11) NOT NULL,
`id_a` int(11) NULL,
`b` varchar(255) NULL,
PRIMARY KEY (`id`)
);
test_b表增加外键:
ALTER TABLE `test`.`test_b`
ADD CONSTRAINT `fk_test_b` FOREIGN KEY (`id_a`) REFERENCES `test`.`test_a` (`id`) ON DELETE CASCADE ON UPDATE CASCADE;
设外键时,有如下几种关系:
CASCADE: 在父表上update/delete记录时,同步update/delete掉字表的匹配记录
SET NULL: 在父表上update/delete记录时,将子表上匹配记录的列设为null(要注意字表的外键列不能为not null)
NO ACTION: 如果子表中有匹配的记录,则不允许对父表对应候选键进行update/delete操作
RESTRICT: 同no action, 都是立即检查外键约束
这时,查看一下表test_a的外键关系,列关系正确:
select * from INFORMATION_SCHEMA.KEY_COLUMN_USAGE where REFERENCED_TABLE_NAME='test_a'