事物隔离级别_悲观与乐观锁

   1.我印象中的事物
事务是一种机制,它确保多个SQL语句被当作完整的操作单元来处理,所有的操作都完成时统一提交。

  2.关系数据库的事务特性(ACID)

ACID:原子性: 事务是数据库的逻辑工作单位,而且必须是原子工作单位,对于修改,要么全部执行,要么全部不执行
         一致性:事务在完成时,必须是所有的数据都保持一致状态。
    隔离型: 一个事务的执行不能被其他事务所影响。事务必须是互相隔离的,防止并发读写同一个数据的情况发生
    持久性: 一个事务一旦提交,事物的操作便永久性的保存在DB中。即使此时再执行回滚操作也不能撤消所做的更改。

  3.Spring事务的隔离级别
   a.脏读(脏数据): 指当一个事务正在访问数据,并且对数据进行了修改,而这种修改还没有提交到数据库中,
这时,另外一个事务也访问这个数据,然后使用了这个数据。因为这个数据是还没有提交的数据,
那么另外一个事务读到的这个数据是脏数据,依据脏数据所做的操作可能是不正确的。

LockMode.UPGRADE_NOWAIT Oracle 支持的锁的方式

下面的代码支持锁的代码:

@Test
    public void testPessimisticLock(){
        Session session = sf.getCurrentSession();
        session.beginTransaction();

        Account a = (Account) session.load(Account.class, 1,LockMode.UPGRADE);//一般用 UPGRADE
        int balance = a.getBalance();
        //do some caculations
        balance -= 10;
        a.setBalance(balance);

        session.getTransaction().commit();
    }

乐观锁

package com.bjsxt.hibernate;

import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;

@Entity
public class Account {

    private Integer id;

    private int balance;

    @Id
    @GeneratedValue
    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    public int getBalance() {
        return balance;
    }

    public void setBalance(int balance) {
        this.balance = balance;
    }

}

  保存

@Test
    public void testOptimisticLock(){
        Session session = sf.openSession();
        Session session2 = sf.openSession();

        session.beginTransaction();
        Account a1 = (Account) session.load(Account.class, 2);

        session2.beginTransaction();
        Account a2 = (Account) session2.load(Account.class, 2);

        a1.setBalance(900);
        a2.setBalance(1100);

        session.getTransaction().commit();
        System.out.println(a1.getVersion());

        session2.getTransaction().commit();//第二次提交时会对比 version 字段,如果值改变,则事务处理失败,回滚
        System.out.println(a2.getVersion());

        session.close();
        session2.close();
    }

b.不可重复读: 指在一个事务内,多次读同一数据。在这个事务还没有结束时,另外一个事务也访问该同一数据。
那么,在第一个事务中的两次读数据之间,由于第二个事务的修改,那么第一个事务两次读到的数据可能是不一样的。

c.幻觉读: 指当事务不是独立执行时发生的一种现象,例如第一个事务对一个表中的数据进行了修改,
这种修改涉及到表中的全部数据行。同时,第二个事务也修改这个表中的数据,这种修改是向表中插入一行新数据。
那么,以后就会发生操作第一个事务的用户发现表中还有没有修改的数据行。

  4.Spring的事务:声明式事务 和  编程式事务
把声明式事务和编程式事务做一下对比:
a,从耦合性上来说,编程式事务耦合性较高,声明式事务耦合性较低;
b,从是否轻量级上来说,编程式事务非轻量级,声明式事务管理轻量级;
c,从实现上来说,编程式事务以代码的形式将事务写在Java类中,声明式事务以配置文件的形式将事务写在XML文件中

时间: 2024-08-28 12:41:04

事物隔离级别_悲观与乐观锁的相关文章

数据库的事物隔离级别以及锁的一些个人理解

数据库的 基本分为 共享锁和排它锁 排它锁顾名思义,不能和其他任何所共存. 以SqlServer中某一行数据为例, 特殊的,WithNoLock 这个是不给数据加上任何锁,所以根本和锁没关系 再说update,update的过程是给这条数据加上排它锁,所以当另外事物过来要求修改这条数据的时候,会由于排它锁的互斥,导致无法申请到排它锁,从而实现同一时间只有一个事物对同一条数据进行修改.同样当该条数据正在修改中但其所属的事物还未提交的时候,查询需要在这条数据上加上共享锁的过程也由于排它锁的存在导致被

事物及事物隔离级别

什么是事物 事物是访问数据库的一个操作序列,数据库应用系统通过事物集来完成对数据库的存取.事物的正确执行使得数据库从一种状态转换为另一种状态. 事物必须服从ISO/IEC所制定的ACID原则.ACID是原子性(atomicity).一致性(consistency).隔离性(isolation).持久性(durability)的缩写,这四种状态的意思是: 1.原子性 即不可分割,事物要么全部被执行,要么全部不执行.如果事物的所有子事物全部提交成功,则所有的数据库操作被提交,数据库状态发生变化:如果

Oracle 事物隔离级别

1.事务介绍 Oracle11g中的事务是隐式自动开始的,不需要用户显示的执行开始事务语句.但对于事务的结束处理,则需要用户进行指定的操作.通常在以下情况下,Oracle认为一个事务结束了. (1)  执行Commit语句提交事务 (2)  执行Rollback语句撤销事务 (3)  执行一条数据定义语句.如果该语句执行成功,那么oracle系统会自动执行commit命令:否则,系统会自动执行Rollback命令. (4)  执行一个数据控制命令,当语句执行完毕,oracle系统会自动执行com

事务隔离机制_悲观锁_乐观锁

5. 事务并发处理 a) 事务的特性:ACID i.Atomicity 原子性 ii.Consistency 一致性 iii.Isolation 隔离性 iiii.Durability 持久性 b) 事务并发时可能出现的问题 i. 第一类丢失更新(Lost Update) 时间 取款事务A 存款事务B T1 开始事务   T2   开始事务 T3 查询账户余额为1000元   T4   查询账户余额为1000元 T5   汇入100元把余额改为1100元 T6   提交事务 T7 取出100元把

Hibernate 事物隔离级别 深入探究

目录 一.数据库事务的定义 二.数据库事务并发可能带来的问题 三.数据库事务隔离级别 四.使用Hibernate设置数据库隔离级别 五.使用悲观锁解决事务并发问题 六.使用乐观锁解决事务并发问题 Hibernate事务与并发问题处理(乐观锁与悲观锁) 一.数据库事务的定义 数据库事务(Database Transaction) ,是指作为单个逻辑工作单元执行的一系列操作.事务处理可以确保除非事务性单元内的所有操作都成功完成,否则不会永久更新面向数据的资源.通过将一组相关操作组合为一个要么全部成功

事务的隔离级别以及oracle中的锁

事务的概念及特性 事务,一般是指要做的或所做的事情.在计算机术语中是指访问并可能更新数据库中各种数据项的一个程序执行单元(unit). 例如:在关系数据库中,一个事务可以是一条SQL语句,一组SQL语句或整个程序. 特性 事务是恢复和并发控制的基本单位. 事务应该具有4个属性:原子性.一致性.隔离性.持久性.这四个属性通常称为ACID特性. 原子性(atomicity).一个事务是一个不可分割的工作单位,事务中包括的诸操作要么都做,要么都不做. 一致性(consistency).事务必须是使数据

事务隔离级别、传播行为及锁机制

1.事务的特性 事务具备以下四个特性,简称ACID属性. 原子性(Atomicity): 事务是一个完整的操作,事务的各步操作都是不可再分的,要么都执行, 要么都不执行. 一致性(Consistency): 当事务完成时,数据必须处于一致的状态. 隔离性(Isolation): 并发事务之间相互独立.隔离,它不应以任何方式依赖于或影响其他事 务. 持久性(Durability): 事务完成后,它对数据库的修改被永久保持. 2. 事务的隔离级别 ① Read uncommitted (读未提交):

由事物隔离级别引发的血案

今天公司的系统发现一个bug:主表记录的已还款总额和还款记录表里面的偿还金额之和不一致.看到这个问题,我的第一反应是怀疑还款的时候离线锁没生效,导致并发修改主表记录.可是经过查看日志和代码,排除了这个可能性.然后又怀疑可能是由于还款之后,修改已还款总额和还款状态时只调用了jpa的save,没有flush,导致没及时写入数据库,别的线程更新的时候不是最新数据.但再一想,发现不对,因为还款的操作是在事务之中进行的,事务结束,jpa会自动把修改写入数据库,应该不会出现这个问题.后来请来大牛帮忙分析,终

事物隔离级别

为了模拟并发环境,SQL SERVER中打开两个查询窗口(分别表示事务1.事务2)即可,并发用户用事务1,事务2简称 测试表脚本:CREATE TABLE [Customer](        [CustID] [int] NOT NULL,        [Fname] [nvarchar](20),        [Lname] [nvarchar](20),        [Address] [nvarchar](50),        [City] [nvarchar](20),