关系型数据库 --- 锁模块

本文探讨了MyISAM与InnoDB在锁方面的区别,MyISAM使用表级锁,InnoDB则采用行级锁。介绍了数据库锁的分类、事务的ACID特性以及事务隔离级别,重点讲解了如何在InnoDB中避免并发访问问题,如更新丢失、脏读、不可重复读和幻读,以及如何在可重复读隔离级别下通过next-key锁避免幻读。
摘要由CSDN通过智能技术生成

锁模块

MyISAM 与 Inno DB 关于锁方面的区别是什么?

一、MyISAM 默认用的是表级锁,不支持行级锁。

lock tables 表名 read | write;表上读锁

unlock tables;表解锁

读锁也叫做共享锁

写锁也叫做排他锁

select 语句后面加上 for update 就可以是 排他锁了。

二、Inno DB 默认用的是行级锁,也支持表级锁。

show  variables like 'autocommit';

set autocommit = 0;关闭自动提交,但是仅支持当前session 就是当前窗口的意思。

begin transaction sql 也可以关闭提交。

select sql 后面加上 lock in share mode ;就可以上读锁了

不走索引的时候 整张表都会被锁住

MyISAM 的使用场景

频繁执行全表 count 语句

对数据进行增删改的频率不高,但是对查询非常频繁

没有事务

Inno DB 的使用场景

数据增删改查都相当频繁的场景

可靠性要求比较高,支持事务

数据库锁的分类

一、按锁的粒度划分,可分为表级锁,行级锁,页级锁

二、按锁的级别划分,可分为,共享锁,排它锁

三、按加锁方式划分 ,可分为,显示锁,自动锁

四、按操作划分,可分为,DML锁,DDL锁

五、使用方式来划分,可分为,乐观锁,和悲观锁

锁模块之数据库事务的四大特效?

ACID

原子性 (Atomic)

一致性 (Consistency)

隔离线 (Isolation)

持久性 (Durability)

事务隔离级别以及各级别下的并发访问特性?

一、事务并发访问引起的问题以及如何避免?

1/更新丢失 --- MySQL所有事务隔离级别在数据库层面上均可避免

2/脏读 --- READ-COMMITTED事务隔离级别以上可避免

查看事务的隔离性 

select @@tx_isolation;

设置当前session的事务隔离级别

set session transaction  isolation level read uncommitted;

开启事务

start transaction;

回滚

rollback;

3/不可重复读 --- REPEATABLE-READ 事务隔离级别以上可避免

set session transaction isolation level repeatable read;

4/幻读 --- SERIALIZABLE事务隔离级别可避免

当前读就是加上共享读锁。

set session transaction isolation level serializable;

Inno DB可重复读隔离级别下如何避免幻读?

表象:快照读(非阻塞读) -- 伪 MCC

内在: next -key 锁 (行锁 + gap 锁)

在RR 级别下事务首次调用快照读的地方很关键,创建快照的时机,决定了快照的版本。 

RC RR级别下的Inno DB 的非阻塞读(快照读)如何实现?

数据行里的DB_TRX_ID 、DB_ROLL_PTR、DB_ROW_ID 字段

DB_TRX_ID  最后一次修改事务的ID 

DB_ROLL_PTR 回滚指针

DB_ROW_ID 行号

undo 日志

read view 

锁模块之RR 如何避免幻读

表象、快照读(非阻塞读) --- 伪MVCC 

next-key  锁(行锁 + gap 锁)

行锁

Gap 锁

对主键索引或者唯一索引会用gap锁吗?

如果where 条件全部命中,则不会加Gap锁,只会加记录锁

如果where条件部分命中,或者全部命中,则会加上gap锁。 

Gap锁会用在 非唯一索引,或者不走索引的当前读中。

一、非唯一索引

gap跟主键值在一起效果更精准 

二、不走索引

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值