数据库事务知识详解

一.数据库事务的基本特征(ACID)

  1. 原子性(Atomic):事务中被包含的业务被看作一个整体的单元,这个业务单元的操作要么全部成功,要么全部失败,不会出   现部分成功,部分失败的场景。
  2. 一致性(Consistency):事务在完成时,必须使所有的数据都保持一致的状态,在数据库中所有的修改都基于事务,保证了数据的完整性。
  3. 隔离性(Isolation):属于核心。可能应用程序线程同时访问同一数据,这样数据库同样的数据就会在各个不同的事务中被访问,这样会产生丢失更新。为了压制丢失更新的产生,数据库定义了隔离级别的概念,通过他的选择,可以在不同程度上压制丢失更新的发生。因为:互联网的应用常常面对高并发的场景,所以隔离性是重点。
  4. 持久性(Durability):事务结束后所有的数据都会固化到一个地方,如保存在磁盘当中,即使断电重启后也可以提供给应用程序访问。

二.隔离级别

  1. 未提交读(read uncommitted):最低级的隔离级别,其含义是允许一个事务读取另外一个事务没有提交的数据。未提交读是一种危险的隔离级别所以一般在我们的开发中应用不广,但是优点在于高并发能力高,适合哪些对数据一致性没有要求而追求高并发的场景,它的最大坏处是出现脏读。
  2. 读写提交(read committed):是指一个事务只能读取另外一个事务已经提交的数据,不能读取未提交的数据。
  3. 可重复读:目标是克服读写提交中出现的不可重复读的现象,因为在读写提交的时候,可能出现一些值的变化,影响当前事务的执行。
  4. 串行化(Serializable):数据库最高的隔离级别,它会要求所有的SQL都会按照顺序执行,这样就可以克服上述隔离级别出现的各种问题,所以它能够保证数据的一致性。
  5. 隔离级别和可能发生的现象
    项目类型脏读不可重复读幻读
    未提交读
    读写提交
    可重复读
    串行化

     

三.实战配置

  1. 以SpringBoot为例:application.properties中的配置
    #隔离级别数字配置含义
    #-1  数据库默认隔离级别
    #1   未提交读
    #2   读写提交
    #4   可重复读
    #8   串行化
    #tomcat数据源默认隔离级别
    spring.datasource.tomcat.default-transaction-isolation=2
    #dbcp2数据库连接池默认隔离级别
    #spring.datasource.dbcp2.default-transaction-isolation=2
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值