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

Posted 残酷游戏

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了数据库事务特性和隔离级别相关的知识,希望对你有一定的参考价值。

事务

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

 

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

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

 

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

     例如: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(保存点)记录操作的当前位置,之后可以回滚到指定的位置

 

以上是关于数据库事务特性和隔离级别的主要内容,如果未能解决你的问题,请参考以下文章

数据库的特性与隔离级别和spring事务的传播机制和隔离级别

数据库事务的四大特性以及事务的隔离级别-与-Spring事务传播机制&隔离级别

数据库事务的四大特性及事务隔离级别

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

事务的四个特性和事务的隔离级别

mysql的事务四个特性以及事务的四个隔离级别