最近面试,面试官提到了悲观乐观,感觉回答的不是很好,特此总结记录. 简单来说,悲观就是凡事都认为会出现最坏的情形,而乐观就是认为凡事都以最好的情形发展,对应一个消极,一个积极.悲观锁具有强烈的独占和排他特性。它指的是对数据被外界(包括本系统当前的其他事务,以及来自外部系统的事务处理)修改持保守态度,因此,在整个数据处理过程中,将数据处于锁定状态.(摘自百度百科) 传统关系型数据库里面的很
# Java数据库实现乐观Demo ## 引言 在现代的软件开发中,数据一致性与并发处理是至关重要的。当多个用户同时操作同一条记录时,数据的安全性就变得尤为重要。乐观作为一种常用的并发控制策略,能够有效解决这一问题。本文将通过一个简单的Java数据库示例来实现乐观的功能。 ## 乐观的原理 乐观的核心思想是:在进行数据更新之前,假定不会发生并发冲突。每次更新操作时,检查在开始操
原创 2024-10-04 06:16:43
43阅读
乐观:每次去拿数据的时候都认为别人不会修改,所以不会上锁,但是在提交更新的时候会判断一下在 此期间别人有没有去更新这个数据。悲观:每次去拿数据的时候都认为别人会修改,所以每次在拿数据的时候都会上锁,这样别人想拿这个 数据就会阻止,直到这个被释放。数据库乐观需要自己实现,在表里面添加一个 version 字段,每次修改成功值加 1,这样每次修改的时候先对比一下,自己拥有的 version
在写入数据库的时候需要有,比如同时写入数据库的时候会出现丢数据,那么就需要机制。数据分为乐观和悲观,那么它们使用的场景如下:1. 乐观适用于写少读多的情景,因为这种乐观锁相当于JAVA的CAS,所以多条数据同时过来的时候,不用等待,可以立即进行返回。2. 悲观适用于写多读少的情景,这种情况也相当于JAVA的synchronized,reentrantLock等,大量数据过来的时候,
转载 2023-11-27 14:16:09
122阅读
写在文章前:本系列文章用于博主自己归纳复习一些基础知识,同时也分享给可能需要的人,因为水平有限,肯定存在诸多不足以及技术性错误,请大佬们及时指正。4.乐观和悲观乐观和悲观锁在数据库和多线程并发中常被提及,但它们并不是某两个特定的,而是两个的宏观理念。悲观:认为数据随时会被修改,因此每次读取数据之前都会上锁,防止其它事务读取或修改数据。应用于数据更新比较频繁的场景。乐观:操作数据时不会
转载 2024-02-27 19:32:57
30阅读
案例说明:银行两操作员同时操作同一账户。 比如A、B操作员同时读取一余额为1000元的账户,A操作员为该账户增加100元,B操作员同时为该账户扣除50元,A先提交,B后提交。最后实际账户余额为1000-50=950元,但本该为1000+100-50=1050。这就是典型的并发问题。乐观机制在一定程度上解决了这个问题。乐观,大多是基于数据版本(Version)记录机制实现。何谓数据版本?即为数据
转载 2024-03-27 09:45:45
238阅读
一、乐观的介绍   乐观是相对悲观而言,也是为了避免数据库幻读、业务处理时间过长等原因引起数据处理错误的一种机制,但乐观不会刻意使用数据库本身的机制,而是依据数据本身来保证数据的正确性。  乐观的机制:对每条数据库加上版本号或时间撮,在每次对数据进行操作(尤其是修改操作)时,总会带上版本号获取数据同时更改后修改版本号。二、乐观的代码示例  2.
原创 2017-01-08 17:30:39
2704阅读
悲观总是假设最坏的情况,悲观认为被它保护的数据是极其不安全的,每时每刻都有可能变动,一个事务拿到悲观后(可以理解为一个用户),其他任何事务都不能对该数据进行修改,只能等待被释放才可以执行。当我们要对一个数据库中的一条数据进行修改的时候,为了避免同时被其他人修改,最好的办法就是直接对该数据进行加锁以防止并发。这种借助数据库机制,在修改数据之前先锁定,再修改的方式被称之为悲观并发控制(又名“
一. 为什么要引入多个用户同时对数据库的并发操作时会带来以下数据不一致的问题。二、的分类(1)从程序员的角度看分为以下两种类型:* 乐观(Optimistic Lock)乐观( Optimistic Locking ) 相对悲观而言,乐观机制采取了更加宽松的加锁机制。悲观大多数情况下依靠数据库机制实现,以保证操作最大程度的独占性。但随之而来的就是数据库性能的大量开销,特别是对长
转载 2023-07-17 20:26:44
117阅读
#概念 #乐观实现方式 取出记录时,获取当前version 更新时,带上这个version 执行更新时, set version = newVersion where version = oldVersion 如果version不对,就更新失败 #使用mybatis-plus测试乐观 1.给数据 ...
转载 2021-08-17 16:05:00
136阅读
2评论
# 使用乐观实现Java数据库操作 乐观是一种处理并发数据访问的策略,适用于读操作远远大于写操作的场景。它的核心思想是在操作时假设不会发生冲突,如果记录被其他事务修改,则会回滚并抛出异常。在本篇文章中,我们将通过一个简单的例子,学习如何在Java中实现乐观,以及如何使用数据库中的版本控制。 ## 整体流程 下面是实施乐观的主要步骤: | 步骤 | 描述
原创 9月前
24阅读
# 理解MySQL数据库中的乐观实现 乐观是一种用于处理并发更新的问题,通常用于提高系统性能和处理冲突。与悲观不同,乐观假设在大多数情况下没有冲突,因此它不会在开始操作时加锁,而是在提交操作时验证是否有其他事务对数据进行了修改。下面,我们将通过一步一步的流程介绍如何在 MySQL 数据库中实现乐观。 ## 一、乐观的流程 以下是实现乐观的主要步骤: | 步骤 |
原创 11月前
51阅读
        第一次接触这个名词,悲观,不知道是谁起的这样的名字. 很想知道为什么叫做悲观, 自己在占用一个东西的时候不允许别人碰就是悲观了(⊙_⊙)?这可能是理智的一种选择. 当然因为学习和生活即是相同的又是不同的, 我们可以这样解释的.悲观是对数据的冲突采取一种悲观的态度, 比如上自习占座, 假设一定会有人和我抢一个
# 使用Java实现数据库版本号与乐观Demo 在软件开发中,数据库的并发处理是一个需要重点关注的问题。乐观是一种常用的处理并发的方式,它通过版本号来确保数据的一致性。本篇文章将指导你如何在Java中实现一个简单的数据库版本号加乐观Demo。 ## 流程概述 在实现过程中,我们将遵循以下步骤: | 步骤 | 描述
原创 2024-09-22 07:50:59
29阅读
MySQL中可以使用SELECT ... FOR UPDATE语句来实现悲观。这个语句会在查询时锁定被查询的行,在事务结束前都不会释放。例如,我们可以使用以下的 SQL 语句来锁定一个特定的行:``` BEGIN; SELECT * FROM table WHERE id = 1 FOR UPDATE; ... COMMIT; ```在这个例子中,我们开始了一个事务,然后使用SELE
mysql5.6我们在操作数据库的时候,可能会由于并发问题而引起的数据的不一致性(数据冲突)乐观乐观不是数据库自带的,需要我们自己去实现。乐观是指操作数据库时(更新操作),想法很乐观,认为这次的操作不会导致冲突,在操作数据时,并不进行任何其他的特殊处理(也就是不加锁),而在进行更新后,再去判断是否有冲突了。通常实现是这样的:在表中的数据进行操作时(更新),先给数据表加一个版本(version
转载 2024-01-28 01:19:05
127阅读
之前说过了Spring事务的四大特性和
转载 2022-08-30 21:38:06
143阅读
一、Oracle Oracle数据库悲观乐观是本文我们主要要介绍的内是...
原创 2022-12-14 14:46:32
182阅读
考察点:数据库 参考回答: 悲观 悲观(Pessimistic Lock),顾名思义,就是很悲观,每次去拿数据的时候都认为别人会 修改,所以每次在拿数据的时候都会上锁,这样别人想拿这个数据就会 block 直到它拿到。 悲观:假定会发生并发冲突,屏蔽一切可能违反数据完整性的操作。 Java synchronized 就属于悲观的一种实现,每次线程要修改数据时都先获得,保证同 一时刻只有
转载 2024-08-11 09:40:48
62阅读
      我们在软件开发中比较常见的概念,数据库的悲观乐观。     为什么会有这两种,主要解决什么问题? 通常是解决并发读写的问题,用生活中例子就是,上厕所需要上锁,一次只能进1个人,加上锁等方便完后再轮到下一个人得到去方便。用在数据库方面的,只不过是换了一种技术概念,叫做并发读写的。悲观,顾名思义,是比较悲观的,在
转载 2024-06-05 09:47:29
44阅读
  • 1
  • 2
  • 3
  • 4
  • 5