1. 事务ACID
原子性(atomicity):组成事务处理的语句形成了一个逻辑单元,不能只执行其中的一部分。
一致性(consistency):在事务处理执行前后,数据库是一致的(两个账户要么都变,或者都不变)。
隔离性(isolcation):一个事务处理对另一个事务处理没有影响。
持续性(durability):事务处理的效果能够被永久保存下来 。
1.1. 常用API
connection.setAutoCommit(false);
关闭自动提交, 打开事务。
connection.commit();
提交事务。
connection.rollback();
回滚事务。
Savepoint sp = conn.setSavepoint();
设置保存点
conn.rollback(sp);
回滚到保存点
conn.setTransactionIsolation(Connection.TRANSACTION_READ_COMMITTED);
设置隔离级别, 可以通过Connection中的常量设置
1.2. 隔离级别
在多线程并发访问数据库并且使用事务的时候, 可能会遇到脏读, 不可重复读, 幻读的情况, 需要设置隔离级别来避免
脏读: 读到的线程未提交的数据
不可重复读: 在一个事务中读取同一个记录两次, 获取数据不同
幻读: 在一个事务中, 读取到的记录数不同
隔离级别 |
脏读 |
不可重复读 |
幻读 |
读未提交 Read Uncommitted |
√ |
√ |
√ |
读已提交 Read Committed |
√ |
√ | |
可重复读 Repeatable Read |
√ | ||
可序列化 Serializable |
|
|
|
select @@tx_isolation;
查看隔离级别
set transaction isolation level read uncommitted;
设置读未提交
set transaction isolation level read committed;
设置读已提交
set transaction isolation level repeatable read;
设置可重复读
set transaction isolation level serializable;
设置可序列化
start transaction;
开始事务
rollback;
回滚事务
commit;
提交事务