MySql主从表,外键介绍

815 阅读2分钟

这是我参与8月更文挑战的第13天,活动详情查看:8月更文挑战

一、SQL注释

  1. 单行注释 -- 注释说明 或 # 注释说明
  2. 多行注释 /* */

在这里插入图片描述

二、数据完整性

  1. 实体完整性:
    • 主键约束
    • 唯一约束
    • 标识列
  2. 域完整性:
    • 数据类型约束
    • 非空约束
    • 默认值约束
  3. 引用完整性
    • 主外键约束
  4. 自定义完整性
    • 存储过程
    • 触发器

三、主表和从表

  1. 主表中没有的,从表不允许插入。
  2. 从表中有的,主表中不允许删除。
  3. 删除主表中,先删从表。

四、外键

外键只有在nnodb引擎才能支持外键。外键是从表中的公共字段。

  1. 创建主表: 在这里插入图片描述

  2. 创建从表: 在这里插入图片描述

主表中没有的,从表不允许插入: 在这里插入图片描述 先插入主表的数据,再插入从表数据: 在这里插入图片描述 从表中有的,主表中不允许删除(要先删从表再删主表): 在这里插入图片描述 通过修改表的时候添加外键: alter table 从表名 add foreign key(公共字段) references 主表名(公共字段)

删除外键,通过外键的名字删除外键:

在这里插入图片描述

4.1 三种外键操作

4.1.1 严格限制

  1. 主表中没有的,从表不允许插入。
  2. 从表中有的,主表中不允许删除。
  3. 删除主表中,先删从表。

4.1.2 置空操作(set null)

如果主表记录删除,或关联字段更新,则从表外键字段被设置为null。

4.1.3 级联操作(cascade)

如果主表记录删除,则从表记录也被删除,主表更新,从表外键字段也更新。 语法: foreign key(外键字段) references 主表名 (关联字段) [主表记录删除时的动作] [主表记录更新时的动作] 一般说删除时置空,更新时级联。

4.1.4 例题与小结

  1. 例题 在这里插入图片描述 在这里插入图片描述 在这里插入图片描述 现在来试试主表删除和更新,从表是否也会删除和更新: 更新: 在这里插入图片描述 删除: 在这里插入图片描述

  2. 小结 置空级联操作中外键不能是从表的主键。

4.2 解决插入数据时主键冲突

创建表:

create table ct(
	id char(4) primary key,
	name varchar(20)
	) engine=innodb;

在这里插入图片描述

插入数据:

insert into ct values ('ct01', 'jack');

在这里插入图片描述

当再次插入数据: 在这里插入图片描述 如果插入的主键重复就会报错。

  1. 解决方法一:如果插入的主键重复就执行替换。 语法: replace into 表名 values () 在这里插入图片描述 使用此语法如果数据不存在,可以直接插入: 在这里插入图片描述
  2. 解决方法二: 语法:on duplicate key update 当插入的值与主键或唯一键有冲突执行update的操作: 在这里插入图片描述 推荐使用方法二。

在学习的MySQL的路上,如果你觉得本文对你有所帮助的话,那就请关注点赞评论三连吧,谢谢,你的肯定是我写博的另一个支持。