• Document


     事务的特性:

    • 原子性(Atomicity)原子性是指事务是一个不可分割的工作单位,事务中的操作要么都发生,要么都不发生。 (多条语句要么都成功,要么都失败。)

    • 一致性(Consistency)事务前后数据的完整性必须保持一致。转账(减钱,加钱)

    • 隔离性(Isolation)事务的隔离性是指多个用户并发访问数据库时,一个用户的事务不能被其它用户的事务所干扰,多个并发事务之间数据要相互隔离。

    • 持久性(Durability)持久性是指一个事务结束(一旦被提交或者回滚),它对数据库中数据的改变就是永久性的,接下来即使数据库发生故障也不应该对其有任何影响。

    并发访问问题(不考虑隔离性):

    1.脏读:A事务读取到B事务未提交或是已经提交的数据。

    2.不可重复读:A事务读取到B事务已经提交的数据。导致A事务多次查询出来数据不一致。

    3.虚读/幻读:A事务读取到B事务已经提交的数据。导致A事务多次查询出来数据不一致。这种情况比较少见,操作一万次还不一定能够遇见一次。

    事务的隔离级别:

    Java API,事务的隔离级别大致分为4种。在接口Connection中的setTransactionIsolation方法可以设置事务的隔离级别。

    void setTransactionIsolation(int level)
                                 throws SQLException
    试图将此 Connection 对象的事务隔离级别更改为给定的级别。可能的事务隔离级别是 Connection 接口中定义的常量。

    注:如果在事务处理期间调用此方法,则结果由实现定义。

    参数:
    level - 以下 Connection 常量之一:Connection.TRANSACTION_READ_UNCOMMITTEDConnection.TRANSACTION_READ_COMMITTEDConnection.TRANSACTION_REPEATABLE_READConnection.TRANSACTION_SERIALIZABLE。(注意,不能使用 Connection.TRANSACTION_NONE,因为它指定了不受支持的事务。)
    抛出:
    SQLException - 如果发生数据库访问错误,在关闭的连接上调用此方法,或者给定参数不是 Connection 常量之一.

    详细介绍下:

    首先在数据库查看下自己数据库的隔离级别:

    show variables like '%isolation%';
    或
    select @@tx_isolation;
    void setTransactionIsolation(int level),level的参数分别是,1,2,4,8;
    mysql默认隔离级别是:4
    oracle默认隔离级别是:2

    Connection.TRANSACTION_READ_UNCOMMITTED :level=1,会出现,脏读,不可重复读,虚读/幻读等情况。

    Connection.TRANSACTION_READ_COMMITTED: level=2,会出现,不可重复读或是虚读/幻读。 

    Connection.TRANSACTION_REPEATABLE_READ :    level=4,会现虚读/幻读,可惜是万分之一的概率,我操作的时候,一次没有遇见过,尴尬。

    Connection.TRANSACTION_SERIALIZABLE :  level=8,不会出现上面的几种情况,虽然安全,但是效率不高。

    一般使用的时候,根据Connetion连接对象设置参数:

    数据库连接对象.setTransactionIsolation(参数);
    参数:1,2,4,8
  • 相关阅读:
    【编程开发】加密算法(MD5,RSA,DES)的解析
    【spring-quartz】 定时调度,时间设置
    IntelliJ IDEA 学习(六)内存设置
    Java中的Double类型计算
    货币金额的计算
    关系数据库设计三大范式【转】
    【服务器防护】WEB防护
    遮罩、警告框/弹框
    Java 中使用 UEditor 整理【待续。。。】
    order by 容易出现的bug记录
  • 原文地址:https://www.cnblogs.com/chenyanlong/p/10973867.html
Copyright © 2020-2023  润新知