MySQL学习10_MySQL外键

外键描述

  • 如果一张表中有一个非主键的字段指向了另一张表中的主键,就将该字段叫做外键;
  • 外键可以是一对一的,一个表的一个字段只能与另一个表的一条记录连接;或者是一对多的,一个表的一个字段与另一个表的多条记录连接;或者是多对多的,一个表的多个字段与多个表的记录连接。

使用条件

  1. 两个表必须是InnoDB表,MyISAM表暂时不支持外键(注:InnoDB与MyISAM);
  2. 外键列必须建立了索引,MySQL 4.1.2以后的版本在建立外键时会自动创建索引,但如果在较早的版本则需要显式建立;
  3. 外键关系的两个表的列必须是数据类型相似,也就是可以相互转换类型的列,比如int和tinyint可以,而int和char则不可以。

作用

  • 可以使得两张表关联,保证数据的一致性和、完整性。

阻止执行

  1. 从表插入新行,其外键值不是主表的主键值便阻止插入;
  2. 从表修改外键值,新值不是主表的主键值便阻止修改;
  3. 主表删除行,其主键值在从表里存在便阻止删除(要想删除,必须先删除从表的相关行);
  4. 主表修改主键值,旧值在从表里存在便阻止修改(要想修改,必须先删除从表的相关行)。

级联执行

  1. 主表删除行,连带从表的相关行一起删除;
  2. 主表修改主键值,连带从表相关行的外键值一起修改。

创建外键

[constraint 约束名] foreign key(字段名) references 主表名(主键名)
[on delete restrict | cascade | set null | no action | set default]
[on update restrict | cascade | set null | no action | set default]

# 示例
create table tbl_score(
id int primary key auto_increment,
course varchar(16),
stu_id int,
constraint c_stu_id foreign key(stu_id) references tbl_stu(id),
score int default 0
);

alter table tbl_score add constraint c_stu_id foreign key(stu_id) references tbl_stu(id);
  • 该语法可以在 create table 和 alter table 时使用;
  • constraint [约束名]:选填,不填则MySQL会自动生成一个名字,可以根据这个名称删除约束;
  • foreign key(字段名),这个字段名需要是存在的;
  • on delete、on update表示事件触发限制,选填参数:
    1. restrict :限制外表中的外键改动,默认值;
    2. cascade : 跟随外键改动;
    3. set null: 设空值;
    4. no action:无动作,默认的;
    5. set default:设默认值;
      在这里插入图片描述
      在这里插入图片描述
      在这里插入图片描述

知识总结,交流学习,不当之处敬请指正,谢谢!

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值