深入理解事务
ACID的含义
- 原子性
- 一致性
- 隔离性
- 持久性
弱隔离级别
读-提交
提供两个保证:
- 读数据库时,只能看到已成功提交的数据(防止“脏读”)
- 读数据库时,只能覆盖已成功提交的数据(防止“脏写”)
实现读-提交
- 防止“脏读”:对于每个待更新的对象,数据库都会维护新、旧值。在事务提交前,别的事务只能读取到旧值(多版本并发控制)
- 防止“脏写”:通过行级锁来实现,必须要要拿到锁的请求才可以修改
快照级别隔离与可重复度
在一个事务内保证多次对同一数据的读取是一致的。
实现快照级别隔离
MVCC 多版本并发控制
防止更新丢失
一个事务读取到某个值之后进行一定的运算,再把新值写到数据库中,在写库之前别的事务可能已经提交了新值的写入,这种情况下会把这个事务的值给覆盖了。
原子写操作
比如 set a = a+1
显示加锁
只有一个事务进行写数据
原子比较和设置
CAS