并发事务下各数据库外部表现实测之六(总结篇)

简介: 根据并发事务的实现方式和外部表现,可以归纳出下面几种事务处理模式(近似的)。1)读未提交读不加锁,写加排他锁。写锁在事务结束时释放。读写不冲突,但可能出现脏读。2)读已提交(基于锁)读加共享锁,写加排他锁。
根据并发事务的实现方式和外部表现,可以归纳出下面几种事务处理模式(近似的)。

1)读未提交
读不加锁,写加排他锁。写锁在事务结束时释放。
读写不冲突,但可能出现脏读。

2)读已提交(基于锁)
读加共享锁,写加排他锁。读锁在读SQL执行后立即释放,写锁在事务结束时释放。
读写冲突,不会出现脏读,但可能出现不可重复读。

3)可重复读(基于锁)
读加共享锁,写加排他锁。读锁和写锁都在事务结束时释放。
读写冲突。不会出现不可重复读,但不能避免幻读。

4)可串行化(基于锁)
读加共享锁,写加排他锁。读锁和写锁都在事务结束时释放。
读写冲突。通过提高锁的粒度等方式,避免幻读。

5)读已提交(基于MVCC)
读时通过MVCC获取查询当时的快照,从而避免了对读加锁。
读写不冲突。

6 )SNAPSHOT ISOLATION(SI)
读时通过MVCC获取事务开始的快照,从而避免了不可重复读,甚至是幻读。
读写不冲突。但写写依赖有可能导致写操作失败。其实这就是一个乐观锁。
写失败后需要事务重新执行,在应用开发上,这种模式没有单纯使用锁的方式那么方便。

7) SNAPSHOT ISOLATION(SSI)
只有PostgreSQL实现了这种模式。和SI的区别在于它提供了额外的读写依赖检测。
读写不冲突。但当系统发现读写依赖和实际的提交顺序矛盾时,终止事务并报错。
从而实现了基于MVCC的严格的可串行化。


各个数据库的并发事务和上面几种实现模式的对于关系(近似的,细节上会有差异)如下:

SQL Server:
读未提交:读未提交
读已提交 (READ_COMMITTED_SNAPSHOT=OFF) :读已提交(基于锁)
可重复读:可重复读(基于锁)
可串行化:可串行化(基于锁)
读已提交 (READ_COMMITTED_SNAPSHOT=ON) :读已提交(基于MVCC)
SNAPSHOT:SNAPSHOT ISOLATION(SI)

Oracle:
读已提交:读已提交(基于MVCC)
可串行化:  SNAPSHOT ISOLATION(SI)

PostgreSQL:
读已提交:读已提交(基于MVCC)
可重复读: SNAPSHOT ISOLATION(SI)
可串行化: SNAPSHOT ISOLATION(SSI)

MySQL:
读未提交:读未提交
读已提交:读已提交(基于MVCC)
可重复读: SNAPSHOT ISOLATION(SI)
可串行化:可串行化(基于锁)

Symfoware
读未提交:读未提交
读已提交 (READ_COMMITTED_SNAPSHOT=OFF) :读已提交(基于锁)
可重复读(R_LOCK=YES ):可重复读(基于锁)
可串行化 (R_LOCK=NO): 可串行化(基于锁)





相关文章
|
6月前
|
中间件 关系型数据库 Go
Go语言数据库编程:数据迁移与事务控制
本文介绍了《Go语言实战指南》中关于数据库编程的核心内容,涵盖使用 GORM 进行数据迁移与事务控制。主要内容包括:AutoMigrate 方法自动创建或更新表结构;事务控制的自动与手动实现方式;事务隔离级别的设置;以及在 Gin 框架中统一管理事务的实践建议。适合开发阶段的数据库结构管理和事务性操作需求。
|
9月前
|
SQL 数据库 索引
【YashanDB数据库】大事务回滚导致其他操作无法执行,报错YAS-02016 no free undo blocks
大事务回滚导致其他操作无法执行,报错YAS-02016 no free undo blocks
|
SQL Oracle 关系型数据库
南大通用GBase 8s 数据库封锁与并发事务调度介绍
南大通用GBase 8s 数据库封锁与并发事务调度介绍
|
12月前
|
SQL 存储 Java
数据库———事务及bug的解决
事务的一些概念,并发事务以及并发事务引起的bug,脏读,不可重复读,幻读,数据库中的隔离级别,事务的简单应用
|
Java 数据库连接 数据库
如何构建高效稳定的Java数据库连接池,涵盖连接池配置、并发控制和异常处理等方面
本文介绍了如何构建高效稳定的Java数据库连接池,涵盖连接池配置、并发控制和异常处理等方面。通过合理配置初始连接数、最大连接数和空闲连接超时时间,确保系统性能和稳定性。文章还探讨了同步阻塞、异步回调和信号量等并发控制策略,并提供了异常处理的最佳实践。最后,给出了一个简单的连接池示例代码,并推荐使用成熟的连接池框架(如HikariCP、C3P0)以简化开发。
335 2
|
数据库
什么是数据库的事务隔离级别,有什么作用
【10月更文挑战第21】什么是数据库的事务隔离级别,有什么作用
199 3
|
存储 关系型数据库 数据挖掘
什么是数据库的事务隔离级别
【10月更文挑战第21】什么是数据库的事务隔离级别
368 1
|
存储 数据库 数据库管理
数据库事务安全性控制如何实现呢
【10月更文挑战第15天】数据库事务安全性控制如何实现呢
|
存储 监控 关系型数据库
MySQL并发控制与管理:优化数据库性能的关键
【10月更文挑战第17天】MySQL并发控制与管理:优化数据库性能的关键
1002 0
|
3月前
|
缓存 关系型数据库 BI
使用MYSQL Report分析数据库性能(下)
使用MYSQL Report分析数据库性能
162 3

热门文章

最新文章