SQL语句的操作,要么完全的执行,要么全部不执行,是一个不可分割的工作执行单元——就是事务
事务的四大特性
- 原子性(Atomicity)
- 一致性(Consistency)
- [✔] 隔离性(Isolation)
- 持久性(Durability)
事务隔离的四种级别
Read uncommited 读取未提交
Read uncommited:最低级别,任何情况都无法保证
- demo:
数据库原始数据 | 100 |
---|---|
事务A | 事务B |
select - 105 | update - 105 |
只要事务B更新数据,无论有没有提交, 事务A都能读取到更新的数据105。
Read commited 读已提交
Read commited:可避免脏读的发生
- demo:
数据库原始数据 | 100 |
---|---|
事务A | 事务B |
select - 100 | update - 105 |
commit |
如果事务B更新数据,但是没有提交, 事务A都只能读取到数据100。
repeatable read 可重复读 — 每次读取的内容都是一个数据
repeatable read:可避免脏读,不可重复读的发生
- demo:
数据库原始数据 | 100 |
---|---|
事务A | 事务B |
select - 100 | update - 180 |
commit |
事务A就像被丢进屏蔽信号的大山中,完全不知道是否有更新数据,无论事务B是否提交,始终读取的原始数据100。
Serializable 串行化
Serializable:可避免脏读,不可重复读
- 事务A 执行完毕后 再执行事务B
读写分离对事务是否有影响?
有!!!
- 对于写操作包括开启事务来说,提交或回滚要在一台机器上执行,分散到多台master执行后数据库原生的单机事务就会失效.
- 对于事务中同时包含读写操作时,与事务隔离级别设置有关,如果事务隔离级别为repeatable-read、serializable,读写分离就有影响.