前言
最近又在回顾数据库的事务和锁相关的技术,总结了总结,每次看都有不同的理解,所以常用的技术还是需要不断的去系统学习加强的。
正文
先上一个图
什么是事务?
维基百科的定义:事务是数据库管理系统(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
锁
锁的分类