事务
1. 概念
事务是一组命令的集合,强调整体性。以 start transaction 或 begin
开始, 以 commit 或 callback
结束。
start transaction
update... 1
update... 2
commit
begin
update... 3
update... 4
rollback
commit 表示提交本次事务,完成修改。(若失败,自动回滚回 begin 之前。)
rollback 表示回滚,还可设定回滚点。 savepoint xxx
, rollback to xxx
2. 特征
原子性、一致性、 隔离性、持久性。
- 原子性:表示整体事务要么全部成功,要么全部失败。
- 一致性:表示事务前后的数据总量不变。
- 隔离性:事务之间互不影响。
- 持久性:事务执行成功后,写入磁盘。
3. 并发产生的问题
脏写、脏读、不可重复读、幻读
脏写
两条线程事务对一条数据做 update, 后来者会覆盖前者的 update。
脏读
一线程事务可以读到他线程已 update 但还未 commit 的数据。
不可重复读
一线程事务多次读一数据的结果不同,因他线程事务在对其数据 update 并 commit .
幻读
一线程事务对一表中的数据量多次读取,结果不同。因他线程事务在 insert 新内容到这个表并 commit.
脏读是 未提交。
不可重复读是已提交,重点看数据。
幻读是已提交,重点看数据行数。
4. 四个隔离级别
- 读未提交:解决脏写,允许一事务读他事务的未提交的数据。
- 读已提交:解决脏读,只允许一事务读他事务已提交的数据。
- 可重复读:解决不可重复读,一事务读他事务已提交的数据,并且多次读取,结果不变。
- 串行化:解决幻读,完全串行化的读写,但效率低。
四个级别依次增强。在前者的基础上解决更多的问题。
标签:...,事务,幻读,update,提交,MySQL,commit From: https://www.cnblogs.com/zxinlog/p/17581013.html