一、前言
好久没更新了,因为工作需求,所以有些待慢啊哈哈哈,话不多说,直接开始分享MySQL第二张思维导图!MySQL第二张思维导图听起来就很干货满满!这次是免费分享给各位的哈,有需要的自取!
本文创作不易,请各位大佬们动动你们的宝贵的小手指,点赞+收藏+关注!谢谢!
各位先看图,如果想要自行修改一些内容的话,请翻到后面将文字复制粘贴到幕布即可,我用的思维导图是幕布软件!
二、思维导图
三、导图文本(幕布)
- 约束语句
- PRIMARY KEY
- 主键约束,约束字段的值可唯一地标识对应的记录
- 可以通过主键查到唯一的一条记录
- 主键约束,约束字段的值可唯一地标识对应的记录
- CHECK
- 检查约束,限制某个字段的取值范围
- UNIQUE
- 唯一约束,约束字段的值是唯一的
- NOT NULL
- 非空约束,约束字段的值不能为空
- 只能列级约束
- 非空约束,约束字段的值不能为空
- DEFAULT
- 默认值约束,约束字段的默认值
- 只能列级约束
- 默认值约束,约束字段的默认值
- AUTO_INCREMENT
- 自动增加约束,约束字段的值自动递增
- 只能列级约束
- 自动增加约束,约束字段的值自动递增
- FOREIGN KEY
- 外键约束,约束表与表之间的关系
- PRIMARY KEY
- 非外键约束
- 列级约束
- 包含在列定义中,直接跟在该列的其它定义之后 ,用空格分隔
- 不必指定列名
- 案例:建立一张存储学生信息的表
create table t1_students(·······)- 【1】学号是主键不能为空且唯一,整数类型要自增
- snum int(3) primary key auto_increment
- 【2】姓名不能为空
- sname varchar(4) not null
- 【3】Email唯一
- semail varchar(10) unique
- 【4】性别只能是男女,默认为男
- sex char(1) default '男' check (sex='男' || sex='女')
- 【5】年龄只能在18-50之间
- sage int(3) check(sage>=18 and sage<=50)
- 【1】学号是主键不能为空且唯一,整数类型要自增
- 表级约束
- 可以约束表中任意一个或多个字段
- 与列定义相互独立,不包含在列定义中,与定义用‘,’分隔
- 必须指出要约束的列的名称
- 案例:建立一张存储学生信息的表
create table t2_students(·······)- 【1】学号是主键不能为空且唯一,整数类型要自增
- snum int(3) auto_increment,
- 自增只能列级约束
- constraint pk_stu primary key(snum),
- constraint:约束
- pk_stu是自己命名的
- 指定snum为主键
- snum int(3) auto_increment,
- 【2】姓名不能为空
- sname varchar(4) not null,
- 不能为空只能列级约束
- sname varchar(4) not null,
- 【3】Email唯一
- semail varchar(10),
- constraint uq_email unique(semail),
- uq_email自己命名的,而指定semail唯一
- 【4】性别只能是男女,默认为男
- sex char(1) default '男',
- 默认值只能列级约束
- constraint ck_stu_sek check (sex='男' || sex='女'),
- ck_stu_sek自己命名的,检查sex的值
- sex char(1) default '男',
- 【5】年龄只能在18-50之间
- sage int(3),
- constraint ck_stu_age check(sage>=18 and sage<=50)
- 【1】学号是主键不能为空且唯一,整数类型要自增
- 建表增约
DDL- 即:建立好一张简单的数据库表后再增加约束
- 案例:建立一张存储学生信息的表
create table t3_student(
snum int(6), sname varchar(5) not null,
sex char(1) default '男',age int(3),email varchar(15)
);- 提醒注意
- ”非空“、”默认值“只能列级约束
- 除表级约束,若没有设置主键的话,自增不能直接列级约束
- 添加约束
- 【1】学号是主键不能为空且唯一,整数类型要自增
- alter table t_student add constraint pk_stu primary key (snum)
- 添加主键
- alter table t_student modify snum int(6) auto_incremnet
- 修改自增条件
- alter table t_student add constraint pk_stu primary key (snum)
- 【3】Email唯一
- alter table t_student add constraint uq_eamil unique(semail)
- 【4】性别只能是男女
- alter table t_student add constraint ck_sex check(sex='男' || sex='女')
- 【5】年龄只能在18-50之间
- alter table t_student add constraint ck_age check(sage>=18 and sage<=50)
- 【1】学号是主键不能为空且唯一,整数类型要自增
- 提醒注意
- 列级约束
- 外键约束
- 外键约束可以使两张表紧密的结合起来
- 外键是指表中某个字段的值依赖于另一张表中某个字段的值,而被依赖的字段必须具有主键约束或者唯一约束
- 被依赖的表:父表/主表
- 设置外键约束的表:子表/从表
- 案例:建立学生表和班级表,其中班级表(主表)的cno与学生表(子表)的classno建立起联系
班级表(父/主表) : 主键
学生表(子/从表) : 外键- ①建立父表
create table t_class(
class_no int(4) primary key auto_increment,
class_name varchar(10) not null,
room char(4)
);- ②方法一:表级约束
- 外键只能用表级约束,不能用列级约束
- 建立班级表
create table t_student(
sno int(6) primary key auto_increment,
sname varchar(5) not null,
classno int(4),-- 取值参考t_class表中的class_no字段
constraint fk_stu_classno foreign key (classno) references t_class (class_no)
);
- ②方法二:建表增约
- 建立班级表
create table t_student(
sno int(6) primary key auto_increment,
sname varchar(5) not null,
classno int(4)
);
- 增加外键约束:alter table t_student add constraint fk_stu_classno foreign key (classno) references t_class (class_no)
- 建立班级表
- ②方法一:表级约束
- ①建立父表
- 子表和父表建立起外键联系
- 若子表输入的外键值在父表主键中无,则无法添加
- 先删除主表,再删除从表
- 外键策略
- 若子表外键存在父表主键的值,则无法直接删除/修改父表主键对应的值,有以下三个策略:
- 策略一:no action 不允许操作
- 将父表主键要修改/删除的值在子表外键中修改为null
- 例:把班级2的学生对应的班级 改为null
update t_student set classno = null where classno = 2;- 这样在父表主键可删除班级2的数据
- 策略二:cascade“级联操作”
- 可直接对父表主键的值进行修改/删除,而子表外键的也相对应的自动变化
- 先删除之前的外键约束;后重新添加外键约束
alter table t_student drop foreign key fk_stu_classno;-- 先删除之前的外键约束:
alter table t_student add constraint fk_stu_classno foreign key (classno) references t_class (cno) on update cascade on delete cascade;--重新添加级联外键约束
update t_class set cno = 5 where cno = 3; - - 试试更新:- 将班级3改为班级5,子表随着父表变
- 策略三:set null“置空操作”
- 可直接对父表主键的值进行修改/删除,但子表外键的值变为空值
- 先删除之前的外键约束;后重新添加外键约束
-- 先删除之前的外键约束:
alter table t_student drop foreign key fk_stu_classno;
-- 重新添加外键约束:
alter table t_student add constraint fk_stu_classno foreign key (classno) references t_class (cno) on update set null on delete set null;
-- 试试更新:
update t_class set cno = 8 where cno = 1;- 将父表主键的班级1改为班级8,而子表的外键值为null
- 注意
- 策略2 级联操作 和 策略2 的 删除操作 可以混着使用
- 例:······on update cascade on delete set null
- 应用场合
- 朋友圈删除,点赞。留言都删除 --- cascade“级联操作”
- 解散班级,对应的学生 置为班级为null就可以了 --- set null“置空操作”
- 策略2 级联操作 和 策略2 的 删除操作 可以混着使用
四、结束语
本文的创作凝聚了无数的心血与努力,实属不易。在此,恳请各位大佬们动动你们那无比宝贵的小手指,给予点赞、收藏以及关注!衷心感谢!后续我还会持续分享相关的学习资料与精彩内容哦。让我们在 SQL 的知识海洋中一同遨游,共同探索数据库的奥秘,为提升我们的数据管理能力和技术水平而不懈努力。期待与大家共同开启这场充满挑战与机遇的学习之旅,共同书写属于我们的数据库传奇。