数据库事务解析

1:数据库事务

1:数据库事务的介绍
  事务就是一个逻辑单位,内部包含了有限的数据库crud 操作;
  这些crud操作必须完整的执行,要么执行成功,要么执行不成功,失败回滚到原来
  的数据状态

2:什么情况下需添加事务呢?

    crud过程中有两个及以上的数据库操作是需要添加

3:事务的作用

    1:保证数据的完整性,失败后可以恢复到原来状态
    2:事务与事务之间互不干扰,这样数据会更加安全

4:数据库事务的基本使用

    mysql--> dbms-->数据库事务自动提交
    一个crud事务就是一个事务,当有一个操作是会自动提交事务,提交后的数据持久改变,
    刻入磁盘,当发生异常,设置回滚,数据库就不会有所改变
    没有异常  commit
    抛出异常  rollback

5:普通话:

      方法一:
        start transaction
        crud...
        commit/rollback
      方法二:
        show variables like '%autocommit%'
        set autocommit = off;
        crud...
        commit/rollback

6:jdbc-java:

      注册驱动:
        Class.forName(xxx.xxx.xxx);
      获取连接:
        DriverManager.getConnection();
      创建语句:
        Statement
       结果集:
          resultSet
  设置非自动提交
    connection.setAutoCommit(false);

7:利用try catch 实现事务

  利用try{
     connection.setAutoCommit(false);
     
     crud...(两条以上);
     connection.commit();
  }catch{
     connection.rollback();
  }

8:事务的acid特性

a:Atomicity(原子性) 职务作为一个整体被执行,包含在其中的操作要么都成功,要么都失败。
c:Consistency(一致性):数据库事务应该保证数据从一个状态到另一个状态应该保证数据的一致性
i:Isolation(隔离性):并发事务互不干扰,
d:Durability(持久性):已经提交事务事务数据在数据库中长久保存。

9:基于事务的转账练习

mysql+c3p0+dbutils+事务+转账
方案:
 1:liyong service 创建connection保证使用了同一个连接
 2:每一次的请求都是同一个线程
 ThreadLocal 同一个线程

10:隔离级别:

  read uncommited(脏读)问题: 读取未提交数据 不可重复读  幻读
  read commited 读取已经提交的数据  问题:发生不可重复读  幻读
  repeatable read 重复读  避免脏读,不可重复度 及小的概率发生幻读
  serializable: 串行化 同时只能有一个事务工作,其余事务等待  不会出现错误 但是效率极低

11:总结

  隔离级别越高,事务之间的隔离性越强,安全性越高,但是效率越低
  隔离级别越低,事务之间的隔离性越低,安全性越低,但是效率越高。
  脏读:一个事务读取了另一个事务的未提交的数据!   错误! 避免! read uncommitted
 不可重复读:一个事务读取了另一个事务提交的修改的数据! read uncommitted  read committed
 幻读/虚读:一个事务读取了另一个事务提交的插入数据!  read uncommitted  read committed repeatable read 
 有极小的可能会发生!

12:隔离级别的语法

  1:查看
    select @@tx_isolation;
  2:设置
    set transaction isolation leval 级别;
  3:jdbc设置隔离级别
    connection.setTransactionIsolation(1|2|4|8);
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值