📋 文章目录
- 一、存储对象-存储函数
- 二、存储对象-触发器
- 1. 介绍
- 2. 语法
- 三、锁
- 1. 介绍
- 2. 分类
- (1)全局锁
- (2)表级锁
- (2)(1)表锁
- (2)(2)元数据锁
- (2)(3)意向锁
- (3)行级锁
- (3)(1)行锁
- (3)(2)间隙锁
- (3)(3)临键锁
---
一.存储对象-存储函数(一般都可以用存储过程替代)
存储函数是有返回值的存储过程,存储函数的参数只能是IN类型的,语法如下:
二.存储对象-触发器
1.介绍
2.语法
三.锁
1.介绍
2.分类
(1)全局锁:对整个数据库上锁,加锁之后数据库就处于只读状态,后续事物的提交都将被阻塞,主要应用场景做全库的逻辑备份
语法
加上全局锁:flush tables with read lock;
释放锁:unlock tables;
备份数据:mysqldump -u root -p密码 itcast>itcase.sql
特点
(2)表级锁:每一次锁住整张表,锁定粒度大,冲突概率最大
分类:
(2)(1)表锁:表共享读锁(read lock),表独占写锁(write lock)
读锁不会阻塞其他客户端的读,但会阻塞写
写锁不仅会阻塞其他客户端的读也会阻塞写
(2)(2)元数据锁:加锁过程是系统自动控制的,主要作用是维护表元数据的数据一致性
select object_type,object_schema,object_name,lock_type,lock_duration from performance_schema.metadata_locks;
(2)(3)意向锁:为了避免行级锁与表锁冲突,InnoDB中加入了意向锁,减少对于锁的检查
(3)行级锁:每一次加锁操作锁住的是数据行,锁级粒度最低,并发度最高
分类
(3)(1)行锁:锁定单个行记录的锁,防止其他事务对此更新或删除
注意:
(3)(2)间隙锁:锁定索引记录间隙(不包含该记录),确保索引记录间隙不变,防止幻读
(3)(3)临键锁:行锁和间隙锁组合,同时锁住数据,并锁住前面的间隙
注意:间隙锁的唯一目的就是防止其他事务插入间隙。间隙锁可以共存,一个事务采用的间隙锁不会阻止另一个事务在同一个间隙上采用间隙锁
j