Mysql

外键约束

外键用来让两张表之间建立连接,从而保证数据的一致性和完整性

一对一

image-20231122184503256

一对多在多的一方建立外键,指向一的一方的主键

image-20231122184524529

多对多建立第三张中间表,包含两个外键,分别关联两方主键

image-20231122184427810

语法

image-20231122182837634

创建表的时候指定外键

外键名称 foreign key (外键字段名) references 主表(主表列名)

创建表后添加外键

alter table 表名 add constraint 外键名称 foreign key (外键字段名) references 主表(主表列名)

当外键形成后,就不能删除部门3了,因为有外键约束

image-20231122182909074

外键约束删除更新行为

image-20231122182854329

当设置外键更新删除行为为 cascade 时 我们删除部门3时,跟部门3关联的stu表中的dept_id为3的也会被删掉 !!!!

当设置外键更新删除行为为 set null 时,我们删除部门3时,跟部门3关联的stu表中的dept_id为3的会被删除为null

image-20231122184000678

代码

-- 创建一对多的表
CREATE TABLE stu (
id int PRIMARY key auto_increment,
`name` VARCHAR(32),
dept_id int
)
INSERT INTO stu (name,dept_id)VALUES('龙钊',1),('黄鹏程',2),('张三',3)

CREATE Table dept(
id int PRIMARY key auto_increment,
`name` VARCHAR(32)
)

INSERT INTO dept (name)VALUES('管理部'),('研发部')

在多的那一方创建外键约束


ALTER TABLE stu add CONSTRAINT fk_stu_dept_id FOREIGN key (dept_id) REFERENCES dept(id)

删除外键
ALTER TABLE stu drop FOREIGN key fk_stu_dept_id


设置外键的更新删除行为为 cascade

ALTER TABLE stu add CONSTRAINT fk_stu_dept_id FOREIGN key (dept_id) REFERENCES dept(id) on UPDATE CASCADE on DELETE CASCADE


设置外键的更新删除行为为 null
ALTER table stu add CONSTRAINT fk_stu_dept_id FOREIGN key (dept_id) REFERENCES dept (id) ON UPDATE SET NULL ON DELETE SET NULL

连接

image-20231122185312048

image-20231122185446574

image-20231122190025115

image-20231122193234873

事务的隔离级别

隔离级别 脏读 不可重复读 幻读
Read uncommitted
Read committed
Repeatable Read(默认)
Serializable

事务隔离级别越高,数据越安全,但是性能越低

并发事务问题:

脏读:一个事务读取到另一个事务还没有提交的数据

不可重复读:一个事务先后读取一条数据,但是两次读取的数据不同

幻读:一个事务查询数据,没有对应的数据,然后再插入数据,却发现对应的数据已经存在

四大特性(ACID)

原子性 事务要么全部成功,要么全部失败
一致性 事务完成时,必须保持所有数据都一致状态
隔离性 保证事务不受外部并发操作影响的独立环境下运行
持久性 事务一旦提交或回滚,对数据的改变是永久的

mysql体系结构

连接层,服务层,引擎层,存储层

存储引擎 (表类型)

是存储数据,建立索引,更新/查询等技术的实现方式,是基于表的,而不是基于库的

mysql默认是innodb

DML(增删改语句)操作遵循ACID模型,支持事务

行级锁,提高并发访问性能

支持外键

innodb逻辑存储结构

image-20231117111736710

image-20231117111940788

image-20231117112127493

索引

索引index是帮助mysql高效获取数据的数据结构(有序)

二叉树?

image-20231117120755177

索引结构

image-20231117120925622

image-20231117124533719

hash结构

image-20231121205025321

image-20231121205123641

image-20231121205444458

索引分类

image-20231122124501113

image-20231122124718071

回表查询

先从二级索引找到对应的主键值

然后再到聚集索引中拿到行数据

image-20231122190231632

image-20231122202708689

sql性能分析

方式一 查看执行频次

image-20231122190847921

image-20231122190855216

方式二 慢日志查询

image-20231122190944469

方式三 profile

image-20231122191102322

image-20231122191032324

image-20231122191543498

方式4 explain

image-20231122191712352

image-20231122195001219

image-20231122195052521

image-20231122195616529

type类型 如果 是查询没有条件 就是all

如果查询的条件是唯一或者是主键,那么就是const

如果查询的条件不是唯一的,那么就是ref

索引使用

image-20231122201445226

image-20231122203640609

image-20231122203814287

image-20231122203934100

image-20231122204238659

image-20231122204403820

image-20231122205058186

image-20231122205722613

image-20231122210744975

image-20231122211229340

image-20231122211846967

image-20231122212021127

索引设计原则

image-20231122213005297

sql优化

插入数据优化

image-20231122215233614

image-20231122215833343

主键优化

image-20231122222449637

image-20231122222624170

image-20231122222746435

image-20231122222803849

image-20231122223005277

image-20231122223131796

Order by优化

image-20231123124913622

image-20231123125759693

image-20231123125851639

group by 优化

image-20231123152500947

limit优化

image-20231123155137371

count优化

image-20231123160204290

image-20231123161532995

image-20231123161900512

update优化

image-20231123162301394

image-20231123162504981

mysql中的锁

image-20231123164028805

image-20231123170408865

image-20231123170629486

当全局锁存在时,不能更新删除数 据,只能查询数据

image-20231123174400919

表级锁

image-20231123174711453

image-20231123180124982

image-20231123180726950

image-20231123181105242

image-20231123181222333

image-20231123181239504

行级锁

image-20231123181619279

image-20231123181735461

image-20231123181819271

image-20231123182331147

image-20231123182547312

主从复制

image-20231123183513002

image-20231123184254292

分库分表

image-20231123184602417

image-20231123184721933

image-20231123184911011

image-20231123185546965

image-20231123185714581

读写分离

一主一从

image-20231123190646635

image-20231123192507609