事务
事务(SavePoint)
当只想撤销事务中的部分操作时可使用SavePoint
SavePoint sp=connection.setSavepoint();
connection.rollerbak(sp);
connection.commit();
事务(ACID)
原子性(atomicity):组成事务的语句形成了一个逻辑单元,不能只执行其
中的一部分。
一至性(consistency):在事务处理执行前后,数据库是一至的(数据库数
据完整性约束)。
隔离性(isolcation):一个事务处理对另一个事务处理的影响。
持续性(durability):事务处理的效果能够被永久保存下来。
connection.setAutoCommit(false);//打开事务
connection.commit();//提交事务
connection.rollback();//回滚事务
事务(JTA)
跨越多个数据源的事务,使用JTA容器实现事务。
分成两阶段提交
javax.transaction.UserTransaction tx=(UserTransaction)ctx.lookup
("jndiName");
tx.begin();
//connection1 connection2(可能来自不同的数据库)...
tx.commit();//tx.rollback();
隔离级别多线程并发读取数据时的正确性
connection.setTransactionlsolation(Connection.TRANSACTION_READ_COMMITTED);
隔离级别 | 读脏 | 不可重复读 | 幻读 |
读未提交(Read uncommitted) | √ | √ | √ |
读已提交(Read committed) | × | √ | √ |
可重复读(Repeatable read) | × | × | √ |
可串行代(Serializable) | × | × | × |
select @@tx_isolation;
tx_isolation为MySQL的一个全局变量,用于查看隔离级别
设置读未提交级别(只影响当前窗口)
set transaction isolation level read uncommitted;
设置读提交级别
set transaction isolation level read committed;
设置可重复读级别(MySQL缺省)
set transaction isolation level repeatable read;
设置系列化级别
set transaction isolation level serializable;
打开事务
start transaction;
回滚
rollback;
提交
commit;