数据库的四大事务特性及事务的隔离级别

事务的四大特性ACID

  • 原子性:事务中的所有额操作时不可在分割的原子单位,事务中的全部操作,要么全部执行成功,要么全部执行失败,
  • 一致性:事务执行后,数据库状态和业务保持一致,如转账业务,无论事务执行成功与否,那么参与转账的两个账号余额之和是不变的
  • 隔离性:指的是在并发操作中,不同事务之间应该隔离开来,是每个并发的事务不会相互干扰
  • 持久性:一旦事务提交成功,事务中的所有的事务操作都必须被持久化都数据库中,即使提交事务后,数据库马上崩溃,在数据库重启时,也必须保证通过某种机制能够恢复数据。

mysql 事务的处理

  • 开启事务start transaction开启一个事务,然后就可以执行多条sql语句
  • 回滚事务 rollback 表示回滚到事务的起点
  • 提交事务 commit 也就是,mysql中的多条sql操作,持久化到了数据库中

JDBC 处理事务

  • 通过Connection 对象完成,必须是同一个Connection 处理一个事务
  • 方法
    • setAutoCommit(boolean) 来设置事务处理
      • true 默认状态,也就是执行一条sql语句,提交一次
      • false 设置为事务处理
    • commit() 提交,将多条sql语句操作进行提交,持久化到数据库中
    • rollback() 回滚,回到事务的起点。
      这里写图片描述

没有事务的隔离会发生的几种情况

  • 脏读
    • 在一个事务处理中,读取了另一个事务处理没有提交的数据
  • 不可重复读
    • 一个事务在多次查询一条记录,但是结果是不一样的,因为被另一个事务修改,并且提交了
    • 脏读和不可重复读的区别
      • 脏读是读取到了另一个事务没有提交的数据,不可重复读是读取到了另一个事务提交的数据
  • 虚度(幻读)
    • 幻读是事务非独立处理的结果,比如;一个事务处理,讲一个表格的某一列的所有的值,从1修改为2,这个时候,另一个事务给表格插入了一行,该列的值是1,那么,第一个事务的处理感觉出现了幻觉,为什么还有一行没有修改呢,这就是幻读。
    • 幻读和不可重复读的区别:
      • 两者都是读取到了另一个事务的提交的数据
      • 不可重复读读取到的是同一个数据项,但是幻读针对的是一个数据整体

mysql提供的四种隔离级别

  • Serializable(串行化):可以避免脏读,不可重复读,幻读的放生
  • Repeatable(可重复读):可以避免脏读,不可重复读的发生
  • Read Committed(读已经提交):可避免脏读的发生
  • Read Uncommitted(读没有提交):最低的级别,任何情况都不能保证

  • ==说明==

    • 隔离级别最高的是Serializable,最低的是Read Uncommitted
    • 级别越高,性能越低,
    • 像Serializable这样的级别,就是以锁表的方式类似于Java多线程总的同步锁,使得其他线程只能在外等候
    • mysql默认的 隔离级别是Repeatable

mysql 设置事务隔离级别

  • 在mysql查看当前事务的隔离级别
    • 命令:select @@tx_isolation
  • 在mysql中设置事务的隔离级别

    • mysql 事务的隔离级别的设置,必须是在事务开启之前
    • 命令:

      • 方式1: set [glogal | session] transaction isolation level 隔离级别名称;

      • 方式2:set tx_isolation=’隔离级别名称;’

JDBC设置事务隔离级别

  • 使用Connection对象
  • 使用JDBC设置事务的隔离级别的时候,必须是在设置setAutoCommit(boolean)方法之前,
  • 调用方法setTransactionIsolation(level)

  • ==注意==

    • 隔离级别设置只是对当前的连接有效。
    • 对于mysql而言,一个mysql命令窗口就是一个连接,
    • 对于JDBC而言,一个COnnection对象,就是一个连接
  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值