事务

通俗的说事务:

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

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

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

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

举例说明
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才有结果。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 一、(了解)定义 全称(Transaction Control Language)翻译成中文 事务控制语言,事务是...
    唯老阅读 665评论 0 2
  • 本文约5000字,建议阅读时间10分钟 关于数据库的事务,相信每个码农都有接触,也相信都遇到过与之相关的坑。本文旨...
    错乱的三元运算阅读 965评论 0 5
  • 问题:事务是什么,有什么用? 事务就是一个事情,组成这个事情可能有多个单元,要求这些单元,要么全都成功,要么全都不...
    yeller阅读 758评论 0 0
  • 一、(了解)定义 全称(Transaction Control Language)翻译成中文 事务控制语言,事务是...
    任未然阅读 201评论 0 0
  • 飞机大战&雷霆战机是一种射击飞行游戏!尽量多的击中敌人战机,尽量多的增加自己的装备,提高战斗力! 试试这个游戏,永...
    SGZKJYXGS阅读 209评论 0 0