Mysql外键三种情况
如果表A的主关键字是表B中的字段,则该字段称为表B的外键,表A称为主表,表B称为从表。外键是用来实现参照完整性的,不同的外键约束方式将可以使两张表紧密的结合起来,特别是修改或者删除的级联操作将使得日常的维护工作更加轻松。这里以MySQL为例,总结一下3种外键约束方式的区别和联系:
这里以省份表和城市表为例,这是一个典型的多对一关系,多个城市对应于一个省份。
省份表创建
CREATE TABLE `sport_province`(
`id` BIGINT(30) NOT NULL AUTO_INCREMENT COMMENT '省份Id',
`name` VARCHAR(64) NOT NULL COMMENT '省份名称',
PRIMARY KEY (`id`)
)ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
城市表创建
CREATE TABLE `sport_city`(
`id` BIGINT(30) NOT NULL AUTO_INCREMENT COMMENT '城市Id',
`name` VARCHAR(64) NOT NULL COMMENT '城市名称',
`provinceId` BIGINT(30) NOT NULL COMMENT '省份Id',
PRIMARY KEY (`id`),
FOREIGN KEY (`provinceId`) REFERENCES sport_province(`id`) ON DELETE CASCADE ON UPDATE CASCADE
)ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
这里sport_city中的provinceId对sport_province的id进行外键管理
第一种情况
FOREIGN KEY (`provinceId`) REFERENCES sport_province(`id`) ON DELETE CASCADE ON UPDATE CASCADE
on delete cascade 删除主表sport_province会一同删除从表sport_city中的数据
on update cascade更新主表sport_province会一同更新从表sport_city中的provinceId
第二种情况
FOREIGN KEY (`provinceId`) REFERENCES sport_province(`id`) ON DELETE set null ON UPDATE set null
on delete set null 删除主表sport_province,从表sport_city中的数据不会删除,provinceId会置为null。
on update set null更新主表sport_province,从表sport_city中的provinceId会置为null。
第三种情况
FOREIGN KEY (`provinceId`) REFERENCES sport_province(`id`) ON DELETE no action ON UPDATE no action
on delete no action 不能删除主表。
on update no action 不能更新主表。