MySQL学习笔记(第五节)

foreign key : 外键约束,针对两张表进行关联
例如,这里有两张表:
学生表:

idnameclassID(所在班级的ID)
1张三1
2李四1
3王五2

班级表:

classIDname
1CS1901
2CS1902

这种情况下可以使用外键来约束学生表和班级表的关系, 使学生表依赖班级表, 将学生表称为"子表", 班级表称为"父表", 学生表里的外键为 ‘classID’.

创建外键:
  先创建一个class表:
请添加图片描述
  再创建一个student表, 并将classid设置为外键:
请添加图片描述
设置外键:
  foreign key (子表中的外键名) references 父表名(父表中的外键名);

  通过外键将两个表关联起来之后, 如果要向子表中插入某一行, 那么这一行里外键的值必须在父表中存在, 例如, 上面的class表中的classID只有1, 2, 那么我们向student表中插入的学生的classID也只能是1和2, 当我们向student表中插入一个classID为 3的学生时, 就会插入失败, 这就是外键对于子表的约束.

  外键不但可以约束子表, 也可以约束父表, 当父表中的某个记录被子表依赖时, 此时对这条记录的删除和修改操作(甚至是直接删除父表)都无法进行, 例如, 我们要删除父表中classID为1的行, 但子表中有两个学生的classID为 1, 那么在删除时就会删除失败.

外键约束的工作原理:
  在子表中插入一条记录时, MySQL会在父表中查找这条记录的外键, 如果查询到, 则可以正常插入, 查询不到则会插入失败, 同理, 在父表中修改或删除记录时, 会在子表中查询是否依赖于这条记录, 如果有, 则会修改或删除失败, 反之即可成功.

  注意: 这里的查询操作的成本(耗时)可能可能较高, 我们要求父表中被依赖的这一列必须有索引, 有了索引就能大大提高查询速度.(父表被约束的这一列, 必须是primary key 或 unique, 有了这两个约束, 就会自动创建出索引)

一个父表可以同时约束多个子表, 一个子表也可以同时被多个父表约束.

和查询结合在一起的新增操作:
  把从上一个表中的查询结果, 作为下一个表要插入的数据.
  举例: 将表A的查询记录插入到B中
请添加图片描述
在执行 “insert into B select * from A” 这条语句时, 首先执行查询操作, 对每个结果都执行插入操作(这种操作需要保证从A中查询到的结果的列数和类型与B表相匹配)

注意: 这里插入的结果就是select 语句产生的临时表

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

zhanglf6699

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值