事务——扫盲篇

前言:不论是学习还是工作中,事务都是一个重要的知识点。可以不记得事务的四大特性,但是脑子里必须清晰一个概念,事务是什么。

一、什么是事务?

事务(Transaction),一般是指要做的或所做的事情。要么不做,要么做完。

  1. 关系型数据库中,一个事务可以是一条SQl语句。
  2. 现实生活中,一个事务可以是一件完整的事。
  3. 软件开发中,一个事务可以是一段逻辑代码。

例:小张给小王转帐1000元。这应该是一件完整的事,这件事中有俩个关键的操作,小张的账户减少1000元,小王的账户增加1000元。如果在这之间出现了问题导致小张减少了1000元,而小王却没有收到钱,这就出错了。事务就是保证这两个关键操作要么都成功,要么都要失败。

二、事务的特性——ACID

1. A:Atomicity,原子性。事务的最小执行单位,不可分割,要么不做,要么做完。
2. C:Consistency,一致性。执行前后数据一致。
3. I :Isolation,隔离性。发生并发时,一个事务不会被其他事务影响。(划重点)
4. D:Durability,持久性。一个事务提交后,他的影响是持久的,不可回退的。

特性一定是在对事务有了清晰的理解之后在结合自己的认识去理解记忆,部分小伙伴为了记忆而记忆,只知道事务有四个特性,什么是事务却模糊不清,这样的记忆是没有灵魂的。

三、事务的使用

  1. 数据库:mysql中事务是自动提交的,oracle中当写完一条sql时,可以使用commit提交事务(事情完成),或者使用rollback回滚(事情没做)。
  2. Spring: @Transactional注解配合其属性来控制事务

有感而发

编程其实就是一个出现问题---->解决问题---->出现问题---->解决问题的循环,永远不会存在没有问题的时候,如果你觉着你写的程序已经完美,那么肯定是没有发现问题。 同样的一个方法,当我觉着它耗时一秒已经完美的时候,有些人却在纠结为啥它耗了10毫秒!!!惹不起!!!~~

四、并发事务带来的问题

  1. 脏读:一个事务对某数据10修改为20还没提交,另一个事务读取到了修改后的数据20。
  2. 丢失修改:一个事务读到某数据10时,另一个数据也读取了这个数据10,第一个事务将其+1,另一个事务也对其+1,结果为11,丢失了一次+1修改。
  3. 不可重复读:一个事务读取了某数据10俩次,第一次读取到10后另一个事务将其改为了20,第一个事务第二次读取到20,出现了一个事务读取同一个数据出现不一样的值。
  4. 幻读(虚读):一个事务读取某数据俩次,第一次读取获取到俩行数据10|20,这时另一个事务添加了一行30,第一个事务第二次读取时获取到10|20|30。

五、事务的隔离级别

隔离级别由低到高,用来解决👆的问题。

  • READ UNCOMMITTED:读未提交。
  • READ COMMITTED:读提交。
  • REPEATABLE READ:可重复度。
  • SERIALIZABLE:可串行化。
隔离级别脏读不可重复读幻读
READ UNCOMMITTED✔️✔️✔️
READ COMMITTED✔️✔️
READ COMMITTED✔️
READ COMMITTED

小知识:

  1. MySQL中InnoDB 存储引擎的默认支持的隔离级别是 READ REPEATABLE(可重读)。
  2. Oracle数据库支持READ COMMITTED 和 SERIALIZABLE这两种事务隔离级别。
  3. Oracle默认系统事务隔离级别是READ COMMITTED(读提交)。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值