zoukankan      html  css  js  c++  java
  • 关于事务和丢失更新

    1.1.1    事务的特性:(面试)

    事务四大特性:

      * 原子性(Atomicity)  :强调的事务的不可分割.

      * 一致性(Consistency)    :强调的事务的执行前后,数据库的的完整性保持一致.

      * 隔离性(Isolation)  :强调的事务的并发的访问,一个事务的执行,不应该受到另一个事务的打扰.

      * 持久性(Durability) :强调的事务结束之后,数据就永久的保存的数据库中.

     

    如果不考虑事务的隔离性:引发一些安全性问题.

      * 脏读       :一个事务,读到了另一个事务未提交数据.

      * 不可重复读 :一个事务,读到了另一个事务的提交数据(update).导致查询结果不一致.

      * 虚读(幻读) :一个事务,读到了另一个事务的提交数据(insert).导致查询结果不一致

     

    数据库中事务的隔离级别:

      * read uncommitted(未提交读) :脏读、不可重复读、虚读都是有可能发生的.

      * read committed(已提交读)   :避免脏读,但是不可重复读和虚读是有可能发生的.

      * repeatable read(重复读)    :避免脏读、不可重复读.但是虚读是有可能发生的.

      * serializable(串行的)       :避免脏读、不可重复读、虚读的发生.

     

      * 安全性:read uncommitted   <  read committed  < repeatable read  < serializable

      * 效率:read uncommitted  > read committed  > repeatable read > serializable

     

      ***** 数据库会比对安全性和效率问题:一般不会采用read uncommitted 和 serializable

      * MYSQL数据库默认的隔离级别:repeatable read

      * Oracle数据库默认的隔离级别:read committed

     

    mysql中做一个事务操作,不想被别的事物操作打扰,就只能把隔离级别设置成串行化(serializable).这样就是单线程.速度慢.

    oracle中可以把隔离级别设置成自身固有的readonly隔离级别.

    这种隔离级别可以查,不可以改.

    面试问oracle有几个隔离级别,答案有三个!

    自身支持的两个和一个固有的readonly.

    关于Oracle支持的隔离级别:

     

     

    1.1.2    JDBC中设置事务的隔离级别:

    conn.setTransactionIsolation(int level) --- 设置事务的隔离级别.

     

    1.1.13   丢失更新(扩展)

    解决:

      1.悲观锁:假设丢失更新一定会存在,采用是数据库一种锁机制.(排他锁)

      2.乐观锁:假设丢失更新不一定存在,采用在数据库中添加一个字段完成.

    悲观锁解决原理:

    乐观锁解决原理:

     

  • 相关阅读:
    黑洞数
    三态门最简单的描述方法
    数据选择器的符号和真值表
    RGB的同步信号
    奇场和偶场在信号格式上的差别
    CPOL与CPHA
    Pixel Replication
    HDMI传输中MCLK的获得
    Protel99 1:1打印PCB
    二极管和整流管
  • 原文地址:https://www.cnblogs.com/DreamDrive/p/4090919.html
Copyright © 2011-2022 走看看