前言

最近又在回顾数据库的事务和锁相关的技术,总结了总结,每次看都有不同的理解,所以常用的技术还是需要不断的去系统学习加强的。

正文

先上一个图

数据库事务与锁_意向锁

什么是事务?

维基百科的定义:事务是数据库管理系统(DBMS)执行过程中的一个逻辑单位,由 一个有限的数据库操作序列构成。

第一个,它是数据库最小的工作单元,是不可以再分的。

第二个,它可能包含了一个或者一系列的 DML 语句,包括 insert delete update。

单条 DDL(create drop)和 DCL(grant revoke)也会有事务

事务出现的原因:

1、当一个业务流程涉及多个表的操作的时候,我们希望他们要么是全部成功的,要么都不成功,这个时候我们会启用事务。

2、多线程并发操作同一个数据

事务的四大特性

事务的四大特性:ACID

第一个,原子性,Atomicity

第二个,一致性,consistent

第三个,隔离性,Isolation

第四个,持久性,Durable

并发造成的问题

1、脏读

2、不可重复读

3、幻读

四个隔离等级

1、Read Uncommitted(未提交读)

2、Read Committed(已提交读)

3、Repeatable Read (可重复读)

4、Serializable(串行化)

保证读一致性的两种方案

1、基于锁的并发控制LBCC

2、多版本的并发控制MVCC

锁的分类

共享锁/独占锁

意向锁

记录锁

间隙锁

临键锁

插入意向锁

自增锁