码迷,mamicode.com
首页 > 数据库 > 详细

数据库事物操作

时间:2017-03-29 16:18:10      阅读:189      评论:0      收藏:0      [点我收藏+]

标签:业务规则   false   保存   并发   不同   repeat   死锁   mit   span   

事务

什么是事务?
转账:
1. 给张三账户减1000元
2. 给李四账户加1000元

当给张三账户减1000元后,抛出了异常!这会怎么样呢?我相信从此之后,张三再也不敢转账了。

使用事务就可以处理这一问题:把多个对数据库的操作绑定成一个事务,要么都成功,要么都失败!

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

事物的特性:ACID

* 原子性事务中所有操作是不可再分割的原子单位。事务中所有操作要么全部执行成功,要么全部执行失败。
* 一致性事务执行后,数据库状态与其它业务规则保持一致。如转账业务,无论事务执行成功与否,参与转账的两个账号余额之和应该是不变的。
* 隔离性隔离性是指在并发操作中,不同事务之间应该隔离开来,使每个并发中的事务不会相互干扰。
* 持久性一旦事务提交成功,事务中所有的数据操作都必须被持久化到数据库中,即使提交事务后,数据库马上崩溃,在数据库重启时,也必须能保证通过某种机制恢复数据。

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

MySQL操作事务

1. 开始事务:start transaction
2. 结束事务:commit//提交事物rollback//事物回滚

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

JDBC事务

1. 开始事务:con.setAutoCommit(false);
2. 结束事务;con.commit()con.rollback();

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

保存点

保存点的是可以回滚到事务中的某个位置,而不是回滚整个事务。
回滚到保存点不会结束事务。
设置保存点:Savepoint sp = con.setSavepoint();
回滚到保存点:con.rollback(sp);

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

事务隔离级别

* 脏读:读到未提交
* 不可重复读:两次读取不一致,读取到另一事务修改的记录
* 幻读:两次读取不一致,读取到另一事务插入的记录

---------------------------------------------------------------------------------------------------------------------------------------------------------------------

四大隔离级别
* SERIALIZABLE(串行化):对同一数据的访问是串行的,即非并发的,所以不会出现任何并发问题。易出现死锁,效率太低!不可用!
* REPEATABLE READ(可重复读):防止了脏读、不可重复读,但没有防止幻读
* READ COMMITTED(读已提交):防止了脏读,但没有防止不可重复读,以及幻读
* READ UNCOMMITTED(读未提交):可能出现所有并发问题,效率最高,但不可用!

MySQL默认事务隔离级别为:REPEATABLE READ
Oracle默认事务隔离级别为:READ COMMITTED

---------------------------------------------------------------------------------------------------------------------------------------------------------------------

MySQL设置事务隔离级别
* 查看:select @@tx_isolation
* 设置:set transaction isolation level 四选一

JDBC设置事务隔离级别
con.setTransactionIsolation(四选一)

 

数据库事物操作

标签:业务规则   false   保存   并发   不同   repeat   死锁   mit   span   

原文地址:http://www.cnblogs.com/lxp503238/p/6639178.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!