MySQL主键、外键以及子表的删除、更新约束

1、什么是主键、外键

主键是指数据表中能唯一识别一条记录,并且被设置为 PRIMARY KEY的字段。主键可以是一个单一的字段,也可以是联合的多个字段。比如,下面建表SQL中就将 userId 设置为主键。

CREATE TABLE `user` (
  `userId` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(30) NOT NULL,
  `sex` int(11) NOT NULL,
  `job` int(11) NOT NULL,
  PRIMARY KEY (`userId`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8


下面的建表SQL中将 organ 表的 userId 设置为外键,该外键引用 user 表的 userId 字段,因此 user 表被设置成 organ 表的主表,organ表即为 user 表的子表。子表的外键,必须是主表的主键。

CREATE TABLE `organ` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `userId` int(11) DEFAULT NULL,
  `type` int(11) DEFAULT NULL,
  `score` int(11) DEFAULT NULL,
  PRIMARY KEY (`id`),
  KEY `uk` (`userId`),
  CONSTRAINT `uk` FOREIGN KEY (`userId`) REFERENCES `user` (`userId`) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8

外键的作用主要是建立主表和子表的从属关系,以保证数据现实意义的完整。比如,我们有一个学生信息表和一个学生成绩表,其中学生信息表是主表,它的学号是主键也是学生成绩表的外键。如果某个学号在学生信息表中不存在,那么我们就不能在学生成绩表中添加该学号的学生成绩。如果将某个学生从学生信息表删除,那么学生成绩表中跟该学生相关的记录都变得没有存在价值,也应当被删除。


2、子表的删除、更新策略

子表的删除更新策略一共有四种:

1)CASCADE  级联策略。使用此种策略时主表的记录被删除或者主键字段被修改时会同步删除或修改子表

2)NO ACTION 无动作策略。使用此种策略时要删除主表必须先删除子表,要删除主表的记录必须先删除子表关联的记录,不能更新主表主键字段的值。

3)RSTRICT 主表约束策略。此种策略对主表的约束跟 NO ACTION 一样

4)SET NO 置空策略。使用此种策略时,如果主表被删除或者主键被更改,则将子表中的外键设置为NULL。需要注意的是,如果子表的外键是主键或者是设置为NOT NULL的,则主表的删除和主键的更改跟 NO ACTION 一样。

  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值