Transaction

事务的概念:数据库

事务指逻辑上的一组操做,组成这组操做的各个单元,要么所有成功,要么所有不成功。

事务的特性:并发

A:原子性(Atomicity):说明事务是一个不可分割的单位。
C:一致性(Consistency):事务必须使数据库从一个一致性状态变换到另一个一致性状态.(好比转帐)
*I:隔离性(Isolation):一个事务不能被其余事务打扰。
D:持久性(Durability):事务一旦提交,就应该被永久保存起来。

事务的隔离级别:性能

未提交读(READ UNCOMMITTED):脏读、不可重复读、虚读都有可能发生。	(隔离级别最低,并发性能高) 
提交读/不可重复读(READ COMMITTED):能避免脏读,不可重复读、虚读都有可能发生。 (锁定正在读取的行 ,Oracle默认的隔离级别)
可重复读(REPEATABLE READ):能避免脏读、不可重复度,虚读有可能发生。	(锁定所读取的全部行 ,MySQL默认的隔离级别)
可串行化(SERIALIZABLE):能避免脏读、不可重复度、虚读。	(锁表)

说明:线程

1)多个线程开启各自事务操做数据库中数据时,数据库系统要负责隔离操做,以保证各个线程在获取数据时的准确性。
2)MySQL中Innodb引擎经过数据库锁(表锁和行锁)来实现事务的隔离。
3)若是不考虑事务的隔离级别,会出现如下“不正确”的状况:
	1>脏读:指一个事务读到了另外一个事务中未提交的数据。
	2>不可重复读:在一个事务内读取表中的某一行数据,屡次读取的结果不一样。重点是修改
		注:不可重复读和脏读的区别是:脏读是读取了另外一个事务中未提交的脏数据,不可重复读是读取了另外一个事务已提交了的数据。
	3>虚读(幻读):在一个事务内读取到了另外一个事务插入的数据,致使先后读取的记录数不一致。重点在于新增或者删除

JDBC中设置事务的隔离级别:code

Connection.setTransactionIsolation(int level); // Level:Connection中的常量

// 在开启事务前先设置隔离级别
Conn.setTransactionIsolation(Connection.*);
Conn.setAutoCommit(false);

MySQL中控制事务隔离级别的语句:事务

查看当前事务的隔离级别:	select @@tx_isolation;
设置当前事务隔离级别:		set transaction isolation level 隔离级别;
相关文章
相关标签/搜索