Mysql外键三种情况

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 不能更新主表。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值