数据库事务知识

数据库事务知识

  • 事务的特性有四个

    1.原子性(Atomicity)。即事务必须是一个不可分割的整体。事务中的操作要么一起成功要么一起失败。

    2.一致性(Consistency)。即执行完数据操作后,数据不会被破坏。

    3.隔离性(Isolation)。即事务之间的隔离。

    4.持久性(Durability)。即数据库必须要保证每一条修改或插入数据都要永久地存放在磁盘中。

  • 事务的隔离级别

    1.READ_UNCOMMITTED。即事务A读取了事务B中未提交的修改数据。这就出现了脏读。
    2.READ_COMMITTED。即事务A读取了事务B提交的更改数据。这就出现了不可重复读。
    3.REPEATABLE_READ。即事务A读取了事务B提交的新增数据。这就出现了幻读。
    4.SERIALIZABLE。此事务级别最高。解决了幻读。

事务隔离级别脏读不可重复读幻读
READ_UNCOMMITTED允许允许允许
READ_COMMITTED禁止允许允许
REPEATABLE_READ禁止禁止允许
SERIALIZABLE禁止禁止禁止
  • java查看数据库默认事务隔离级别
    Connection conn = DriverManager.getConnection(url, username, passowrd);
    DatabaseMetaData meta = conn.getMetaData();
    //事务隔离级别
    int isolation = meta.getDetaultTransactionIsolation();

  • Spring事务传播行为

    spring一共提供了7种事务传播行为。

    1.PROPAGATION_REQUIRED 如果没有事务,就新建一个事务;如果有事务,就加入当前事物。这也是Spring提供的默认事物传播行为。

    2.PROPAGATION_REQUIRES_NEW 如果没有事务,就新建一个事务;如果有事务,就将当前事务挂起。意思是创建了一个新事务,它和原来的事务没有任何关系了。

    3.PROPAGATION_NESTED 如果没有事务,就新建一个事务;如果有事务,就在当前事务中嵌套其他事务,所嵌套的子事务与主事务之间有关联的(当主事务提交或回滚,子事务也会提交或回滚)。

    4.PROPAGATION_SUPPORTS 如果没有事务,就以非事务方式执行;如果有事务,就使用当前事务。

    5.PROPAGATION_NOT_SUPPORTED 如果没有事务,就以非事务方式执行;如果有事务,就将当前事务挂起。

    6.PROPAGATION_NEVER 如果没有事务,就以非事务方式执行;如果有事务,就抛出异常。

    7.PROPAGATION_MANDATORY 如果没有事务,就抛出异常;如果有事务,就使用当前事务。

  • Spring 还提供了事务超时和只读事务

    1.事务超时(Transaction Timeout)——为了解决事务时间太长,消耗太多资源的问题,所以故意给事务设置一个最大时长,如果超时了,就回滚事务。

    2.只读事务(Readonly Transaction)——为了忽略那些不需要事务的方法,比如读取数据,这样可以有效地提高一些性能。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值