mysql中的锁:
介绍:
卫生间的门
作用:
保证事务之间的隔离性,也保证了数据的一致性。
保证资源不会争用。锁是属于资源的,不是某个事务的特性。
每次事务需要资源的时候,需要申请持有资源的锁。
锁类型
资源:
内存锁:mutex , latch 保护内存数据页不被争用,不被释放。
对象锁:
MDL(元数据锁) : 修改元数据,DDL操作 ,(表也会锁定)
Table_lock : 表锁 DDL,备份(FTWRL 全局表锁) lock tables read city;也可能升级为表锁
record(row) lock: 行锁,索引锁,锁定聚簇索引
GAP: 间隙锁,建立在RR级别下的非唯一索引,即辅助索引。跟新范围
Next-lock: 下一键锁, gap + record(row) lock,普通辅助索引的范围锁
对象锁的粒度
MDL(元数据锁) : 修改元数据,DDL操作 ,(表也会锁定)
Table_lock : 表锁 DDL,备份(FTWRL 全局表锁) lock tables read city;也可能升级为表锁
record(row) lock: 行锁,索引锁,锁定聚簇索引
GAP: 间隙锁,建立在RR级别下的非唯一索引,即辅助索引。跟新范围
Next-lock: 下一键锁, gap + record(row) lock,普通辅助索引的范围锁
功能分类:
IS :意向共享锁 表级别
S:共享锁,读锁 行级别
IX:意向排他锁 表级别
X:排他锁,写锁 行级别

验证gap锁:
建表和数据准备:
create table(id int auto_increment,
age int ,
name varchar(20),
PRIMARY KEY (id)
,key idx_n (age)
)engine = innodb charset=utf8mb4;
desc gab_test;
insert into gab_test (age,name) values (4,'liliw1'),(6,'lilir1'),
(9,'lilit1'),(13,'lilri1'),(24,'lilic1'),(28,'lilis1'),(29,'lilig1'),(30,'lilik1'),
(45,'lilig1'),(46,'lilid1'),(48,'lilid1'),(49,'liliq1'),(50,'lilia1'),(67,'lili1oo'),(67,'lilidd1'),
(68,'lili1dd'),(69,'lilidd1'),(70,'lilifd1'),(71,'lilidd1'),(73,'lili1j'),(74,'lilfdi1'),(75,'lilifds1'),
(78,'liliwer1'),(88,'lilifsdf1'),(89,'lili1'),(91,'lfdsili1'),(92,'lilifds1'),(93,'lilire1'),(94,'ljili1'),
(95,'lfdili1'),(98,'lilnhi1'),(99,'litgli1'),(99,'liljui1'),(100,'lilsdi1'),(100,'lililo1'),(111,'lilian1'),
(112,'lilfdsi1'),(113,'lilhyi1'),(114,'lilfsdi1'),(115,'liecli1'),(116,'liliny1'),(224,'lilvfdei1'),(212,'liljhyi1'),
(213,'lilsdfi1'),(215,'lilvcvi1'),(216,'liliwerv1'),(222,'lilivsds1');
select * from gab_test;
会话1: 进行update ,把10以下的age 的name更新为凤姐

会话2:进行插入操作,插入一个age为1的数据.可以看到进行了锁等待.

会话3:进行锁的查看:

可以看到会话2插入芙蓉姐姐的数据,进行了排他锁X,和GAP锁的等待。
事务的一致性ACID的C的特性
A:原子性:UNDO,REDO
D:持久性 : commit 的数据,REDO(写入到磁盘)
I:隔离性:ISOLATION Level,Lock,MVCC(Undo)
C:保证事务工作前中后数据的状态都是完整的。一致性的。
所以c的特性是以上所有特性都是来保证一致性的。
写一致性:undo,redo ,lock
读一致性:ISOLATION level,mvcc (undo)
数据页一致性 :
double write buffer (两次写)
说明:
double writebuffer 是Innodb在tablestpace
上的128个页(2个区),大小是2MB;为了解决partail page
wirte的问题,buffer pool 跟新的数据页先写入到 double write buffer中, 在写入到 磁盘。
(详细看书)
网友评论