事务

通俗的说事务:

原子性:要么都成功执行,要么都不执行.

隔离性:其他会话不能够看到中间改变的过程

一致性:事务发生前,和发生后,数据的总额依然匹配

持久性:事务产生的影响不能够撤销

事务_第1张图片

举例说明
A1000,B1000,A要给B转500

1、 脏读 : B可以读到A未commit的事务
设置隔离级别为:read uncommitted

A:开启事务:start transaction;
转账500
未Commit提交
A通知B,转账成功,叫B查询

B: 开启事务:start transaction;
select... 查到了,A500,B1500,交易ok

此时:Arollback回滚,变成A1000,B1000,
B欲哭无泪,上当了

2、不可重复读(虚读):同一个事务,读到的不一样
设置隔离级别为:read committed

A开启事务:start transaction;
B开启事务:start transaction;
Bselect A1000,B1000
此时A转账了500,并且commited
由于B之前开启了事务,但是未commit,并且之前查A1000,B1000,此时B又想查一遍,咦,为啥变成了A500,B1500了?

就是因为B开启的事务 && 未提交前,两次查询不一致,就叫做虚读。

那这样不好吗?比如财务要像老板汇报,今年收益达到了35%,刚刚汇报给老板,此时可以发生了一些事情,收益降低了5%,老板一看,这不是30%吗,你能力是不是有问题?
财务欲哭无泪!此时财务就得需要把事务隔离设置为repeatable read,这样再未commit之前,读到的数据,才会保持不变。

3、设置repeatable read,会产生幻读,和上面正好相反,A事务修改了,B事务就看不到修改了

4、设置serializable:串行化

A 开启事务,未commit之前,此时B做了select操作,对不起,请等着,
等Acommit之后,B的select才有结果。

你可能感兴趣的:(事务)