数据库事务特性和隔离级别

事务

一组业务操作,要么全部成功,要么全部不成功。

 

----------------事务的特性--------------

原子性一个事务是一个整体,不可分割,事务中的操作要么都成功,要么都失败。

 

一致性事务必须是使数据库从一个一致性状态变到另一个一致性状态。事务执行前后,数据库的状态是一致的。

     例如:A有1000,元,B有1000元,加起来是2000,中间执行转账的操作,转账后两个人的钱加起来还是2000.

 

隔离性两个或多个事务并发操作,之间会互相影响。数据库提供了隔离级别来消除这些影响。

 

持久性一旦一个事务提交了,对数据库中的数据的影响就是永久的了,如果数据库出现故障或者其他操作都不应该再对其产生影响。

 

以上是事务的四个特性简称ACDI,重点是事务的隔离性,在对数据库进行操作的时候,开启多个事务同时进行操作,为了能够准确的获取数据,数据库要有隔离性。如果没有隔离性的话,会出现以下几个隔离问题:

----------------隔离问题----------------

脏读一个事务读到了另一个事务未提交的数据

不可重复读一个事务读到了另一个事务已经提交的数据(主要针对update)

幻读/虚读一个事务读到了另一个事务已经提交的数据(主要针对insert)

 

----------------隔离级别----------------

为了避免这些问题,数据库提供了四种隔离级别(级别由低到高,效率由高到低)

read uncommitted读未提交,最低级别,存在脏读,不可重复读,幻读三个问题

read committed读已提交,只能在当前事务中读取到其他事务已经提交的数据。避免了脏读的问题。

repeatable read可重复读,避免了脏读和不可重复读的问题。

serializable串行化,避免脏读,不可重复读,幻读的发生。相当于给事务加了锁,效率会比较低。

在mysql数据库中,支持以上四种事务隔离级别,默认的事务隔离级别为repeatable read;

在oracle数据库中,支持read committed、serializable两种事务隔离级别,默认的隔离级别为read committed;

 

 

----------------jdbc对数据库事务管理----------------

 

使用jdbc来对数据库事务进行管理:对事务隔离级别的设置要在开启事务之前

部分代码:

savepoint(保存点)记录操作的当前位置,之后可以回滚到指定的位置

 

posted @ 2017-11-26 16:46  残酷游戏  阅读(404)  评论(0编辑  收藏  举报