JDBC事务控制

con.setAutoCommit(false);//设置事务为手动控制  
con.commit();//提交事务  
con.rollback();//回滚事务  


st.executeUpdate(sql);
sp = conn.setSavepoint();//1.获取事务标志位

conn.rollback(sp);//2.回滚到事务标志位
conn.commit();//3.事务提交


//设置事务隔离级别. Connection类定义了一些事务级别常量
con.setTransactionIsolation(Connection.TRANSACTION_READ_COMMITTED);


//多个数据源操作事务的时候,需要JTA容器支持.tomcat不支持JTA.




//返回主键
PreparedStatement ps = con.prepareStatement(sql, Statement.RETURN_GENERATED_KEYS);
		ResultSet rs = ps.getGeneratedKeys();



================================================================================

事务隔离级别

隔离级别                                脏读      不可重复读    幻读

读未提交(Read uncommitted)               V            V          V
读已提交(Read committed)                 X            V          V
可重复读(Repeatable read)                X            X          V
可序列化(Serializable)                   X            X          X

================================================================================
隔离级别(isolation level)



隔离级别定义了事务与事务之间的隔离程度。

隔离级别与并发性是互为矛盾的:隔离程度越高,数据库的并发性越差;隔离程度越低,数据库的并发性越好。

ANSI/ISO SQL92标准定义了一些数据库操作的隔离级别:

未提交读(read uncommitted)

提交读(read committed)

重复读(repeatable read)

序列化(serializable)

通过一些现象,可以反映出隔离级别的效果。这些现象有:

更新丢失(lost update):当系统允许两个事务同时更新同一数据是,发生更新丢失。

脏读(dirty read):当一个事务读取另一个事务尚未提交的修改时,产生脏读。

非重复读(nonrepeatable read):同一查询在同一事务中多次进行,由于其他提交事务所做的修改或删除,每次返回不同的结果集,此时发生非重复读。(A transaction rereads data it has previously read and finds that another committed transaction has modified or deleted the data.  )

幻像(phantom read):同一查询在同一事务中多次进行,由于其他提交事务所做的插入操作,每次返回不同的结果集,此时发生幻像读。(A transaction reexecutes a query returning a set of rows that satisfies a search condition and finds that another committed transaction has inserted additional rows that satisfy the condition.  )

================================================================================

--mysql查询当前用户
mysql> select user();

--mysql查询当前事务处理级别
mysql> select @@tx_isolation;

--mysql设置隔离级别
mysql> set transaction isolation level read uncommitted;

你可能感兴趣的:(sql,tomcat,mysql,jdbc)