h2database源码浅析:事务、两阶段提交
Transaction Isolation
Transaction isolation is provided for all data manipulation language (DML) statements. Most data definition language (DDL) statements commit the current transaction. See the Grammar for details.
This database supports the following transaction isolation levels:
- Read Committed
 This is the default level. Read locks are released immediately after executing the statement, but write locks are kept until the transaction commits. Higher concurrency is possible when using this level.
 To enable, execute the SQL statementSET LOCK_MODE 3
 or append;LOCK_MODE=3to the database URL:jdbc:h2:~/test;LOCK_MODE=3
- Serializable
 Both read locks and write locks are kept until the transaction commits. To enable, execute the SQL statementSET LOCK_MODE 1
 or append;LOCK_MODE=1to the database URL:jdbc:h2:~/test;LOCK_MODE=1
- Read Uncommitted
 This level means that transaction isolation is disabled.
 To enable, execute the SQL statementSET LOCK_MODE 0
 or append;LOCK_MODE=0to the database URL:jdbc:h2:~/test;LOCK_MODE=0
When using the isolation level 'serializable', dirty reads, non-repeatable reads, and phantom reads are prohibited.
- Dirty Reads
 Means a connection can read uncommitted changes made by another connection.
 Possible with: read uncommitted
- Non-Repeatable Reads
 A connection reads a row, another connection changes a row and commits, and the first connection re-reads the same row and gets the new result.
 Possible with: read uncommitted, read committed
- Phantom Reads
 A connection reads a set of rows using a condition, another connection inserts a row that falls in this condition and commits, then the first connection re-reads using the same condition and gets the new row.
 Possible with: read uncommitted, read committed
Two Phase Commit
The two phase commit protocol is supported. 2-phase-commit works as follows:
- Autocommit needs to be switched off
- A transaction is started, for example by inserting a row
- The transaction is marked 'prepared' by executing the SQL statement PREPARE COMMIT transactionName
- The transaction can now be committed or rolled back
- If a problem occurs before the transaction was successfully committed or rolled back (for example because a network problem occurred), the transaction is in the state 'in-doubt'
- When re-connecting to the database, the in-doubt transactions can be listed with SELECT * FROM INFORMATION_SCHEMA.IN_DOUBT
- Each transaction in this list must now be committed or rolled back by executing COMMIT TRANSACTION transactionNameorROLLBACK TRANSACTION transactionName
- The database needs to be closed and re-opened to apply the changes
h2database源码浅析:事务、两阶段提交的更多相关文章
- 分布式事务 & 两阶段提交 & 三阶段提交
		可以参考这篇文章: http://blog.csdn.net/whycold/article/details/47702133 两阶段提交保证了分布式事务的原子性,这些子事务要么都做,要么都不做. 而 ... 
- h2database源码浅析:SQL语句的执行
		最近想好好了解一下数据库的原理,下载了h2database的源码,准备好好看看.此过程的一些想法,暂且记下来,权当做读码笔记吧! 为了调试准备的测试用例: @Test public void test ... 
- h2database源码浅析:集群
		Clustering / High Availability This database supports a simple clustering / high availability mechan ... 
- h2database源码浅析:锁与MVCC
		Table Level Locking The database allows multiple concurrent connections to the same database. To mak ... 
- h2database源码浅析:TransactionMap、MVMap、MVStore
		TransactionStore:A store that supports concurrent MVCC read-committed transactions. TransactionStore ... 
- h2database源码浅析:MVTable与MVIndex
		Database包含一个Store:MVTableEngine.Store getMvStore() MVTableEngine.Store可以获取各tables:java.util.HashMap& ... 
- 分布式事务 spring 两阶段提交 tcc
		请问分布式事务一致性与raft或paxos协议解决的一致性问题是同一回事吗? - 知乎 https://www.zhihu.com/question/275845393 分布式事务11_TCC 两阶段 ... 
- Flink EOS如何防止外部系统乱入--两阶段提交源码
		一.前言 根据维基百科的定义,两阶段提交(Two-phase Commit,简称2PC)是巨人们用来解决分布式系统架构下的所有节点在进行事务提交时保持一致性问题而设计的一种算法,也可称之为协议. 在F ... 
- MySQL源码之两阶段提交
		在双1的情况下,两阶段提交的过程 环境准备:mysql 5.5.18, innodb 1.1 version配置: sync_binlog=1 innodb_flush_log_at_trx_comm ... 
随机推荐
- dataStructure@ Check whether a given graph is Bipartite or not
			Check whether a given graph is Bipartite or not A Bipartite Graph is a graph whose vertices can be d ... 
- 【转】Mybatis Generator最完整配置详解
			本文转简书:http://www.jianshu.com/p/e09d2370b796 --> --> <!-- 自动识别数据库关键字,默认false,如果设置为true,根据Sql ... 
- POJ 3678--Katu Puzzle(2-SAT)
			感觉这题比较裸,表现出了2-sat的本质. 不过构图我想的还是太简单了,a&b=1我只连了 a1->b1,b1->a1,但其实是不对的.这样连,a0和b0可以同时选到.应该连a0- ... 
- 10行Java代码实现最近被使用(LRU)缓存
			在最近的面试中,我曾被多次问到,怎么实现一个最近最少使用(LRU)的缓存.缓存可以通过哈希表来实现,然而为这个缓存增加大小限制会变成另一个有意思的问题.现在我们看一下怎么实现. 最近最少使用缓存的回收 ... 
- Java文件清单列表
			package FileDemo; import java.io.BufferedWriter; import java.io.File; import java.io.FileWriter; imp ... 
- 转载.Net MVC中Html.RenderPartial和Html.RenderAction 的应用与区别
			Html.Partial方法:是将视图内容直接生成一个字符串并返回, Html.RenderPartial方法是直接输出至当前HttpContext, 而Html.RenderAction还调用一下A ... 
- jquery插件封装思路整理
			<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ... 
- $().each 和 $.each() 两个方法的区别
			在jquery中,遍历对象和数组,经常会用到$().each和$.each(),两个方法.两个方法是有区别的,从而这两个方法在针对不同的操作上,显示了各自的特点. $().each,对于这个方法,在d ... 
- 【AwayPhysics学习笔记】:Away3D物理引擎的简介与使用
			首先我们要了解的是AwayPhysics这个物理引擎并不是重头开始写的新物理引擎,而是使用Flascc技术把一个已经很成熟的Bullet物理引擎引入到了Flash中,同时为了让as3可以使用这个C++ ... 
- .Net基础学习
			http://www.cnblogs.com/iPragmatic/p/4930396.html memcache的介绍与应用场景 http://www.cnblogs.com/nixi8/p/493 ... 
