1、原子性(Atomicity)

事务的原子性是指事务中包含的所有操作要么都做,要么都不做,保证数据库是一致的。

例如:A帐户向B帐户划账1000,则先将A减少1000,再将B增加1000,这两个动作要么都提交,要么都回退,不可能发生一个有效、一个无效的情况。

2、一致性(Consistency)

一致性是指数据库在事务操作前和事务处理后,其中的数据必须都满足业务规则约束。

例如:A、B帐户的总金额在转账前和转帐后必须一致,其中的不一致必须是短暂的,在事务提交前才会出现的。

再如:约定B帐户不能多于1000元,则A转出1000成功,B转入1000失败,最终由原子性得到——整个事务回滚

3、隔离性(Isolation)

隔离性是数据库允许多个并发事务同时对齐数据进行读写和修改的能力,隔离性可以防止多个事务并发执行时由于交叉执行而导致数据的不一致。

例如:在A、B之间转帐时,C同时向A转帐,若同时进行则A、B之间的一致性不能得到满足。所以在A、B事务执行过程中,其他事务不能访问(修改)当前相关的数值。

4、持久性(Durability)

持久性表示为:事务处理结束后,对数据的修改就是永久的,即便系统故障也不会丢失。

在提交之前如果系统故障,则所有信息全部丢失。提交之后数据存放在磁盘中,是永久性的。

事务的控制

事务的开始是隐形声明的,不用也没有语句可以进行操作,默认从对数据的修改开始就开始了当前事务。

对数据库的设置主要有一下语句:

SET TRANSACTION-----设置事务属性

SET CONSTRANS-------设置约束模式

SAVEPOINT-----------建立存储点

RELEASE SAVEPOINT---释放存储点

ROLLBACK------------回滚

COMMIT--------------提交

1、设置事务属性

设置事务属性主要可以用来完成以下工作:

* 指定事务的隔离层

* 规定回滚事务时所使用的存储空间

* 命名事务

注:SET TRANSACTION必须是事务的第一个语句。并在事务终止后自动失效。

SET TRANSACTION ISOLATION LEVEL READ COMMITED

A事务设置为READ COMMITED,该开始后B事务修改了数据,此时A无法得到新数据,B提交之后,A可以查询到更新数据。 A不可能错读,但可能发生假读和非重复读。

在需要并发数很大时应该使用READ COMMITED,对于多用户并发的性能和响应速度都比较好。

SET TRANSACTION ISOLATION LEVEL SERIALIZABLE

事务和事务之间完全隔离开,事务以串行的方式执行。不是说必须等一个结束,而是事务一旦开始,在结束之前查询到的数据永远是开始时刻的数据。由于留存的模式会比较多,所以会消耗一定的系统资源。

SET TRANSACTION READ ONLY

当前事务不能有任何修改数据的操作,READ ONLY是SERIALIZABLE的一个子集,基本上属于最高的安全级。

SET TRANSACTION READ WRITE

在READ的基础上增加WRITE权限,不常用

2、设置约束延期性

在操作过程中可能需要违反约束向表中插入重复的数据,其实需要设置约束延期性。

设置格式如下:

SET CONSTRAINT ALL | <constraint_name>

DEFERRED | IMMEDIATE

可以选择要延期的约束名,也可以使用ALL关键字延期所有的约束

DEFERRED表示延期,IMMEDIATE表示应用

注:理论上在COMMIT前需要设置回IMMEDIATE,但是系统可以隐式自动完成这一操作。

注意:要使用延迟的约束,必须在创建时就进行说明:

ALTER TABLE T1 ADD CONSTRAINT <constraint_name> DEFERRABLE INITIALLY IMMEDIATE

后面的DEFERRABLE 指名可以使用延迟,INITIALLY 设定了初始值

3、存储点

由于事务太大,一次回滚会对系统造成很大的压力。而且有时候在某一段特定的代码附近会特别发生错误而回滚。这时就需要在希望的地方设置一个存储点,可以显示得操作数据在发生错误时回滚到指定的存储点,而节省不必要的开销。

创建格式如下:

SAVEPOINT <savepoint_name>

使用格式如下:

ROLLBACK TO [SAVEPOINT] <savepoint_name>

4、结束事务

以下操作为将事务结束:

* 使用COMMIT提交事务,数据被永久保存

* 使用ROLLBACK回滚事务(不包括回滚到存储点)

* 执行DDL时,结束默认COMMIT

* 用户断开连接,此时事务自动COMMIT

* 进程意外中止,此时事务自动ROLLBACK

Oracle事务的ACID特性的更多相关文章

  1. 深入学习MySQL事务:ACID特性的实现原理

    事务是MySQL等关系型数据库区别于NoSQL的重要方面,是保证数据一致性的重要手段.本文将首先介绍MySQL事务相关的基础概念,然后介绍事务的ACID特性,并分析其实现原理. MySQL博大精深,文 ...

  2. MySQL事务及ACID特性

    一.事物 1.定义:事务是访问和更新数据库的程序执行单元,事务中包含一条或者多条SQL语句,这些语句要么全部执行成功,要么都不执行. 在MySQL中,事务支持是在引擎层实现的,MySQL是一个支持多引 ...

  3. [MySQL] 事务的ACID特性

    事务的ACID特性: 原子性(atomicity):一个事务是一个不可分割的最小工作单位,事务中的所有操作要么都做,要么都不做. 一致性(consistency):事务前后数据的完整性必须保持一致.事 ...

  4. 分布式事务(ACID特性、CAP定律)

    普通事务和分布式事务的区别: 普通事务就是一般所说的数据库事务,事务是数据库管理系统执行过程中的一个逻辑单位,由一个有限的数据库操作序列构成.当事务被提交给了DBMS(数据库管理系统),则DBMS(数 ...

  5. 深入理解大数据之——事务及其ACID特性

    目录 事务简介 事物的定义 事务的目的 事务的状态 事务的ACID属性 ACID简介 原子性(Atomicity) 一致性(Consistency) 隔离性(Isolation) 持久性(Durabi ...

  6. 数据库中事务的ACID特性

    数据库中事务的ACID特性 前言前面我们介绍过数据库中 带你了解数据库中JOIN的用法 与 带你了解数据库中group by的用法 的相关用法.本章节主要来介绍下数据库中一个非常重要的知识点事务,也是 ...

  7. 一文说尽MySQL事务及ACID特性的实现原理

    MySQL 事务基础概念 事务(Transaction)是访问和更新数据库的程序执行单元:事务中可能包含一个或多个 sql 语句,这些语句要么都执行,要么都不执行.作为一个关系型数据库,MySQL 支 ...

  8. 事务的ACID特性

    事务(Transaction)是并发控制的基本单位.    所谓事务,它是一个操作序列,这些操作要么都执行,要么都不执行,它是一个不可分割的工作单位.例如,银行转帐工作:从一个帐号扣款并使另一个帐号增 ...

  9. 事务的ACID特性(转)

    ACID特性 数据库中的事务(Transaction)有四个特性,分别是:原子性(Atomicity),一致性(Consistency),隔离性(lsolation),持久性(Durability) ...

随机推荐

  1. webapi在IIS发布后报Http 403.14 error

    服务器是Windows Server 2008 R2 Enterprise IIS6.1     解决方法,修改web.config文件   1.在<system.webServer>配置 ...

  2. iTabs Tab切换插件

    最近项目中使用到Tab切换,切换的页面不变,内容发生变化,随手写了份简单的插件,附带源码.先看样子: 本人也考虑到是否使用jquery ui tab,但是还是热衷于自己写一份,首先好处之一是易于培训, ...

  3. spring framework各个版本下载网址

    spring framework各个版本下载网址 http://repo.spring.io/simple/libs-release-local/org/springframework/spring/

  4. UART介绍

    https://baike.baidu.com/item/UART/4429746?fr=aladdin

  5. Okhttp之RealConnection建立链接简单分析

    在之前的博客中我们知道Okhttp在发起链接请求先从链接池中获取连接,如果链接池中没有链接则创建新的链接RealConnection对象,然后执行其connet方法打开SOCKET链接(详见< ...

  6. linux系统编程-进程

    进程 现实生活中 在很多的场景中的事情都是同时进行的,比如开车的时候 手和脚共同来驾驶汽车,再比如唱歌跳舞也是同时进行的: 如下是一段视频,迈克杰克逊的一段视频: http://v.youku.com ...

  7. java未来发展方向!新手入门了解

    随社会信息的发展着,java广泛应用于PC.数据中心.游戏控制台.科学超级计算机.移动电话和互联网等行业.从目前的招聘量上看,对java开发人才需求量是很大的,而且未来的仍然是主流,就业前景很好.只要 ...

  8. 解决form嵌套

    自己的尝试功能实现了 但是项目中没有使用: 思路利用ajax:第一个form提交的时候触发第二个需要提交数据的ajax的请求url function checkform(type){ var issu ...

  9. BZOJ3932 CQOI2015 任务查询系统 【主席树】

    BZOJ3932 CQOI2015 任务查询系统 Description 最近实验室正在为其管理的超级计算机编制一套任务管理系统,而你被安排完成其中的查询部分.超级计算机中的任务用三元组(Si,Ei, ...

  10. java基本类型和封装类型区别及应用

    1.基本类型只能按值传递,而每个基本类型对应的封装类是按引用传递的. 2.从性能上说java中的基本类型是在堆栈上创建的,而所有的对象类型都是在堆上创建的,(对象的引用在堆栈上创建).比如 Integ ...