首页 > 其他分享 >有了事务为什么还需要乐观锁和悲观锁

有了事务为什么还需要乐观锁和悲观锁

时间:2023-02-06 15:00:11浏览次数:30  
标签:事务 读取 乐观 并发 保证 悲观 数据 隔离


有了事务为什么还需要乐观锁和悲观锁_乐观锁

​​为什么有了事务这东西,还需要乐观锁悲观锁?事务是粗粒度的概念、乐观锁悲观锁可以更细粒度的控制;
比如抢票,假设余票只有1张;隔离级别可以保证事务A和事务B不能读到对方的数据,也不能更新对方正在更新的数据,但是事务A和事务B都认为还有1张余票,于是出票,并更新为0;

事务解决了并发问题,已经不存在并发问题了;

但是事务B读取的是过时数据,依据过时数据做了业务处理;

所以需要乐观锁或者悲观锁,来记录一个信息:当前已经读取的数据,是不是已经过时了!



事务有这么几种实现方式:锁协议、MVCC、时间戳排序协议、有效性检查协议,锁协议是事务的一种实现方式,事务 = 用锁封装的一个函数,可以重用而已,但是这几个事务的函数覆盖面太粗粒度了,所以有时候我们还得借助于锁来进行细粒度控制;




事务不能保证每个操作结果正确,售票时超卖还是会发生。



事务保证整个操作的成一个组,要么全做要么全不做 但是不能保证多个事务同时读取同一个数据
数据对象被加上排它锁时,其他的事务不能对它读取和修改;加了共享锁的数据对象可以被其他事务读取,但不能修改




事务可以用锁实现,可以保证一致性和隔离性,但是锁用来保证并发性;




隔离性和并发性有点类似,但是隔离性只是保证不会出现相互读取中间数据,却无法解决并发的问题

标签:事务,读取,乐观,并发,保证,悲观,数据,隔离
From: https://blog.51cto.com/peishuai/6039166

相关文章

  • Spring MVC & SpringBoot & Spring 事务
    ......
  • mysql排查事务及进程的语句
    查询事务SELECT*FROMinformation_schema.INNODB_TRX;查询正在锁的事务SELECT*FROMINFORMATION_SCHEMA.INNODB_LOCKS;查询等待锁的事务SELECT*FROMINFORMATION_SCHE......
  • day67-sql中的事务
    事务要么都成功要么都失败事务原则:ACID原子性,一致性,隔离性,持久性原子性:要么一起成功要么一起失败一致性:针对一个事务操作前后状态一致持久性:事务结束后的数据不会随......
  • mysql:聊聊mysql中的锁八股文,锁分类,表锁(s锁,x锁,意向锁,自增锁,元数据锁)行锁(记录锁,间隙锁,临
    mysql:锁分类,表锁(s锁,x锁,意向锁,自增锁,元数据锁)行锁(记录锁,间隙锁,临键锁,插入意向锁)乐观锁,悲观锁,显示锁,隐式锁1从数据操作的类型划分:读锁、写锁读锁读锁:也称为共享锁、英文......
  • Spring异步Async和事务Transactional注解
    Spring开发中我们我们常常用到@Transaction和@Async,但这2个注解加在一起很多的开发者不敢用,担心事务不生效。下面我们就仔细讲解一下这2个注解同时运用,文章用3个场景讲述它......
  • Spring事务传播行为详解
    前言Spring在TransactionDefinition接口中规定了7种类型的事务传播行为。事务传播行为是Spring框架独有的事务增强特性,他不属于的事务实际提供方数据库行为。这是Spring为......
  • Spring 5(五)事务操作
    五.事务操作1.事务概念1.1什么是事务事务是数据库操作最基本单元,逻辑上一组操作,要么都成功,如果有一个失败所有操作都失败典型场景:银行转账*Iucy转账100元给mary*lucy少100,ma......
  • Oracle视图、事务
    --1、视图view--创建视图createorreplaceviewv_stuasselect"StudentNo","StudentName","Phone","Address"from"Student";select*fromv_stu;--查询视图dropvie......
  • 《SQL基础》09. 事务
    目录事务简介操作方式一方式二四大特性(ACID)并发事务问题事务隔离级别事务简介事务是一组操作的集合,它是一个不可分割的工作单位。事务会把所有的操作作为一个整体一起......
  • 事务管理-cnblog
    4).DishServiceImpl中实现方法saveWithFlavor页面传递的菜品口味信息,仅仅包含name和value属性,缺少一个非常重要的属性dishId,所以在保存完菜品的基本信息后,我们需要获......