事务处理
1.事务的四大特性
1.原子性
事务中的所有的操作是不可分割的原子单位,要么全部操作成功,要么全部失败。
2.一致性
当事务执行后,数据库的状态应该和业务规则保持一致。比如说,转账业务,无论事务成功与否,两个账户的金额之和因当是不变的。
3.隔离性
隔离性是指在并发操作中,不同的事务应该隔离,并发操作的事务不应该互相干扰。
4.持久性
一旦事务提交成功,所有的数据操作应该持久化到数据库中。即使在事务提价之后,数据库崩溃了,数据库重启后也能通过某种机制恢复数据库
2.Mysql中开启和关闭事务
--开启事务
start transaction
--关闭事务
commit 表示提交
rollback 表示回滚
3.jdbc中完成事务处理
try{
con.setAutoCommit(false); //false开启事务
...
con.commit(); //try的最后提交事务
} catch () {
con.rollback();//回滚事务
}
4.事务的隔离级别
1.事务的并发读问题
脏读:读取到另一个事务为提交数据;
不可重复读:两次读取不一致,因为一次事务对其造成了修改
幻读:读到另一事务已经提交的数据。
脏读:
事务一:张三给李四转账100元。
事务二:李四查看自己的账户。
事务一开始,张三给李四转账100元
事务二开始,李四看到自己的账户多出100元,并提交事务
事务一回滚事务,回到了转账之前的状态。
不可幻读:
事务一:酒店查看两次1048房间状态
事务二:预定1048号房间
事务一开始,查看房间为空闲状态
事务二开始,预定1048号房间
事务二提交事务。
事务一再次查看,1048号房间已被使用
事务一提交
对同一记录的两次查询结果不一致
四大隔离级别
1SERIALIZABLE串行化
2REPEATABLE READ可重复读
3READ COMMMITTED读已提交数据
4READ UNCOMMMITTED读未提交数据