`
yidianfengfan
  • 浏览: 125092 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

数据库事务与并发及锁的问题

    博客分类:
  • sql
阅读更多
    对于事务与并发以前了解了下,也以为自己知道了是怎么回事。可是最近又被这事务及并发搞得晕乎了(最近脑袋很不好使,缺氧啊),事务为了解决什么?多个事务的并发又有什么问题?于是google了,做个笔记,以后忘记了好方便查看。

    一直以来了解得并不清楚,平常我们用得最多的可能就是涉及到两个表数据操作时为了保证数据的一致性,就会在这些操作时加上事务,因为我们知道事务具有原子性、一致性。

原子性: 事务中的操作为一个整体, 要么都做, 要么都不做. 即一旦事务出错, 就回滚事务.
一致性: 事务开始前, 数据库中的数据具有一致性, 事务结束时, 数据库中的数据仍具有一致性.
隔离性: 一个事务不能被另一个事务干扰, 退一步讲, 一个事务被另一个事务干扰的话, 为了防止出错, 它就会回滚.
持久性: 事务完成后, 就不能再回滚了, 对数据库的改动是永久的.

    事务所能解决也就是一致性,而不能解决多个事务并发带来的数据的不正确的问题。比如两个并发事务同时对一条记录进行操作,后提交的事务的更新会覆盖前提交的事务。比如购买扣费时我们得判断用户的金额大于物品的价格,然后扣除。
Select gold from use where id = 1000;  //gold = 1000, price = 1000
If(gold >= price){//若两并发此时判断都为真,都会扣除最终数据会变成-1000
		Update user set gold = gold – price where id = 1000;
}

当并发时这代码就会有问题。
可以用乐观锁与悲观锁来解决此问题。
1. 乐观锁
将update语句更改为
update user set gold = gold – price where id = 1000 and gold = selectGold

当影响的行不为1时表示数据已经被其他事务更改过了。可以抛出异常,最好还得有页面提示用户。
不过一般的乐观锁都是每个数据行有一个版本号或更改的时间戳,每个更新操作前select 出来,更新时带上条件并要更改版本号或时间戳。

2. 悲观锁

将select改为
select gold from user where id=1000 for update 

这样多线程并发时就在阻塞在select上, 不会进行下一步的操作, 可这也加大的锁的区域影响了并发性能,一般不建议作用这种形式。
分享到:
评论

相关推荐

    数据库事务、hibernate悲观锁和乐观锁

    数据库事务是数据库操作的核心组成部分,它确保了数据的一致性和完整性。事务是由一系列数据库操作组成的逻辑单元,这些操作要么全部成功执行,要么全部不执行,遵循ACID(原子性、一致性、隔离性和持久性)原则。 ...

    数据库安全事务与锁数据库安全事务与锁

    【数据库安全事务与锁】 数据库安全事务与锁是数据库管理系统中的关键概念,它们确保了多用户环境下数据的一致性和完整性。在SQL Server 2000中,事务和锁机制对于保证数据库系统的并发操作和数据安全性至关重要。 ...

    数据库的事务处理与并发控制

    数据库处理的经典资料: 叫你处理事务 如何并发处理 瞧瞧吧 机不可失哟

    《数据库原理》并发操作、串行调度

    正确的调度是指多个事务并发执行时,其结果与某一串行调度的结果相同。可串行化的调度称为正确的调度。 七、并发调度的实例 设 T1、T2、T3 是三个事务:T1: A:=A+2, T2: A:=A*2, T3: A:=A*2。设 A 的初值为 0。...

    数据库并发控制机制——事务

    这是一个关于银行的数据库的处理,模仿的是从账户1转账给...那就需要用到事务,如果没有一起执行,就回滚。这个代码比较简单,希望对大家有帮助,自己建立一个数据库bank,在里面建立一个表Account,两属性:Id,money.

    数据库事务总结 数据库事务总结

    ### 数据库事务总结 #### 一、事务的基本概念与特性 **事务**是数据库系统中的一个逻辑工作单元,它由一系列的操作组成,这些操作要么都完成,要么都不完成,以此来保证数据的一致性和完整性。 #### 二、事务的...

    数据库事务及锁机制面试题

    ### 数据库事务及锁机制详解 #### 一、事务的概念与特性 事务是数据库系统中一组操作的集合,用于确保数据的一致性和完整性。在事务处理中,事务被视为一个不可分割的工作单元,其中包含的操作要么全部成功,要么...

    软考系分之数据库事务并发与事务加锁

    ### 数据库事务并发与事务加锁 #### 一、数据库事务基本概念 在数据库领域,事务(Transaction)是由一系列操作组成的逻辑工作单元。事务具备四个关键特性:原子性(Atomicity)、一致性(Consistency)、隔离性...

    8、数据库安全性管理、数据库事务及并发控制.sql

    8、数据库安全性管理、数据库事务及并发控制.sql

    数据库中事务和锁.ppt

    在数据库管理系统中,事务和锁是两个至关重要的概念,它们主要用于保证数据的一致性和完整性,以及在多用户环境下的并发访问控制。 事务是数据库操作的基本单位,它封装了一组数据库操作,这些操作要么全部执行,...

    一次长事务导致数据库锁等待超时问题跟踪

    一次长事务可能会占用大量资源,导致其他并发事务出现锁等待,甚至超时,严重影响数据库的性能和正常服务。本篇文章将深入探讨这个问题,从原因、表现、诊断到解决策略进行详细分析。 一、长事务的定义与特征 长...

    数据库并发控制的基本方法

    - **可串行化调度**:虽然事务并发执行,但是其效果等同于串行调度。 #### 五、冲突可串行性 冲突可串行性是一种特殊的可串行化调度,其中只考虑了事务间的冲突操作。如果一个调度中所有的冲突操作都可以重新排列...

    数据库PPT关于并发控制

    数据库并发控制是数据库管理系统中的关键组成部分,其目的是确保在多用户环境下,多个事务同时执行时,数据...在并发环境中,通过锁机制和规范化设计,可以确保数据库在多事务并行执行时仍然保持数据的正确性和一致性。

    数据库的并发控制

    数据库并发控制是指在多用户环境下,当多个事务试图同时访问或修改同一数据时,数据库管理系统采取措施确保所有事务正确执行的过程。并发控制机制是衡量数据库管理系统性能的一个重要指标。如果没有适当的并发控制,...

    浅谈数据库中事务处理和并发控制技术

    数据库事务处理和并发控制是数据库管理系统(DBMS)中的核心技术, Guarantees 数据库的可靠性和一致性。本文将详细介绍数据库事务处理和并发控制技术的概念、特性和实现机制。 一、事务处理概念 事务处理是数据库...

    数据库中的事务管理,恢复以及并发控制技术.doc

    此外,还有两阶段锁协议(2PL)、乐观并发控制(OCC)和并发事务调度算法如死锁检测与解除策略。 在恢复技术方面,数据库系统通常采用日志记录事务的操作,以便在系统崩溃或异常情况下,通过回滚未完成的事务和重做...

    数据库思维导图——并发控制

    数据库思维导图——并发控制 并发控制 多事务执行方式 (1)事务串行执行 每个时刻只有一个事务运行,其他事务必须等到这个事务结束以后方能运行 不能充分利用系统资源,发挥数据库共享资源的...事务并发执行带来的问题

Global site tag (gtag.js) - Google Analytics