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

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

二.隔离级别

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

三.实战配置

  1. 以SpringBoot为例:application.properties中的配置
<pre class="has">

#隔离级别数字配置含义
#-1 数据库默认隔离级别
#1 未提交读
#2 读写提交
#4 可重复读
#8 串行化
#tomcat数据源默认隔离级别
spring.datasource.tomcat.default-transaction-isolation=2
#dbcp2数据库连接池默认隔离级别
#spring.datasource.dbcp2.default-transaction-isolation=2

标签: 数据库, 级别, 读写, 提交, 详解, 隔离, 事务

相关文章推荐

添加新评论,含*的栏目为必填