一、概述

  事务是一些数据库操作的集合,这些操作由一组相关的SQL语句组成(只能是 DML 语句),它们是一个有机的整体,要么全部成功执行,要么全部不执行。事务时数据库并发控制和恢复技术的基本单位。

  事务就有ACID四个特性:

  [1] 原子性(Atomicity):事务时数据库的逻辑工作单位,事务中的逻辑操作要么都做,要么都不做。

  [2] 一致性(Consistency):事务的执行结果必须是使数据库从一个一致性状态转变到另一个一致性状态,不存在中间的状态。

  [3] 隔离性(Isolation):数据库中一个事务的执行不受其他事务干扰,每个事务都感觉不到还有其他事务在并发执行。

  [4] 持久性(Durability):一个事务一旦提交,则对数据库中数据的改变是永久性的,以后的操作或故障不会对事务的操作结果产生任何影响。

二、事务的隔离级别

  1、事务的兵法运行可能导致如下三个问题:

  [1] 丢失修改:两个事务同时读取数据库中的同一数据并进行修改,一个事务提交的结果破坏了另一个事务提交的结果,导致第一个事务对数据的修改丢失。

  [2] 读“脏”数据:一个事务对数据的修改再提交之前被其他事务读取。

  [3] 不可重复读:在某个事务读取一次数据后,其他事务修改了这些数据并进行了提交,当该事务重新读取这些数据时就会得到与前一次不一样的结果。

  2、针对以上问题,Oracle提供两个级别的事务隔离

  [1] READ COMMITED(提交读)

  事务的默认隔离等级,用于设置语句级的一致性。每个事务所执行的查询操作只能获取在该查询开始之前(不是该事务开始之前)已经提交的数据。该隔离级别可以防止丢失修改和脏读的问题,但不能防止不可重复读的问题。在该级别的事务中可以执行 DML 操作(若数据被加锁则等待其他事务解锁)。

  [2] SERIALIZABLE (串行化)

  用于设置事务级的一致性,每个事务只能够看到在该事务开始之前已经提交的数据。该级别隔离可防止以上三个问题。在该级别的事务中可以执行 DML 操作(若数据被加锁则不等待,返回错误)。

  如果数据库中具有大量并发事务,并且应用程序的事务处理能力和响应速度是关键因素,则 READ COMMITED 隔离级别比较合适。如果数据库中多个事务并发访问数据的概率很低,并且大部分的事务都会持续执行很长时间,适合 SERIALIZABLE 隔离级别。

  设置和修改隔离级别,如下:

SET TRANSACTION ISOLATION LEVEL 隔离级别;

ALTER SESSION SET ISOLATION_LEVEL = 隔离级别; 

  在Oracle数据库中,可以设置 READ ONLY(只读),每个事务只能看到在该事务开始之前已经提交的数据,并且不能在该事务中对数据进行 DML 操作,从而保证取得特定时间点的数据信息。

SET TRANSACTION  READ ONLY;

三、事务处理

  1、事务提交

  Oracle数据库中,有两种方式:

  [1] 用户执行 COMMIT 命令;

  [2] 执行特定操作时,系统自动提交。

  当事务提交后,用户对数据库的修改操作的日志由日志缓冲区写入到重做日志文件中,释放该事务所占据的系统资源和数据库资源。此时,其他会话可以看到该事务对数据库的修改结果。

  当执行 CREATE、ALTER、DROP、RENAME、REVOKE、GRANT、CONNECT、DISCONNECT 等命令时,系统将自动提交。

  2、事务回滚

  通过 ROLLBACK 命令取消事务中的操作,执行该命令后,事务中的所有操作被取消,数据库恢复到事务开始之前的状态,同时事务占用的系统资源和数据库资源被释放。

  如果只想取消事务中的部分操作,而不是取消全部操作,则可以在事务内部设置保存点,将一个大的事务划分为若干个组成部分,这样就可以将事务回滚到指定的保存点。

  使用 SAVEPOINT 语句设置保存点。

INSERT INTO ...
SAVEPOINT A
UPDATE ...
SAVEPOINT B

  回滚:

ROLLBACK TO A;
ROLLBACK TO B;
ROLLBACK;

SQL语言 之 事务控制的更多相关文章

  1. oracle-SQL语言基础-事务控制命令命令

    事务控制命令命令 COMMITROLLBACKSAVEPOINTSET TRANSACTION 当第一条可执行的SQL语句开始执行,数据库事务就开始.随着下面任一事件发生,数据库事务结束:执行COMM ...

  2. SQL批处理与事务控制

    今天我想要分享的是关于数据库的批处理与事务的控制.批处理对于项目的实际应用有非常大的具体意义. 一.批处理部分 首先我们新建一个表: create table t3( id int primary k ...

  3. 数据库系统学习(八)-SQL语言与数据库完整性和安全性

    第八讲 SQL语言与数据库完整性 重难点 数据库完整性的概念 关系数据库 防止和避免数据库中不合理数据的出现 输入错误,操作失误,程序处理错误等 完整性约束条件的一般形式 对O操作集合,当出现A情况时 ...

  4. SQL 语言 - 数据库系统原理

    SQL 发展历程 从 1970 年美国 IBM 研究中心的 E.F.Codd 发表论文到 1974 年 Boyce 和 Chamberlin 把 SQUARE 语言改为 SEQUEL 语言,到现在的 ...

  5. SQL语言分类

    SQL语言共分为四大类:数据查询语言DQL,数据操纵语言DML, 数据定义语言DDL,数据控制语言DCL. 1 数据查询语言DQL数据查询语言DQL基本结构是由SELECT子句,FROM子句,WHER ...

  6. MySQL中的SQL语言

    从功能上划分,SQL 语言可以分为DDL,DML和DCL三大类.1. DDL(Data Definition Language)数据定义语言,用于定义和管理 SQL 数据库中的所有对象的语言 :CRE ...

  7. 数据库与SQL语言

    数据库(DB) :长期储存在计算机中.有组织.可共享的数据的集合. 特点:(1)数据按一定的数据模型组织.描述和储存:(2)较小的冗余度:(3)数据独立性较高:(4)易扩展:(5)可共享(不同用户可按 ...

  8. [SQL]SQL语言入门级教材_SQL数据操作基础(二)

    SQL数据操作基础(初级) netnova 于 -- :: 加贴在 数据库探讨: 为了建立交互站点,你需要使用数据库来存储来自访问者的信息.例如,你要建立一个职业介绍服务的站点,你就需要存储诸如个人简 ...

  9. SQL语言简介

    什么是SQL语言? 是高级非过程化语言(是沟通数据库服务器和客户端的工具) 作用:存取,查询,更新和管理关系数据库系统 SQL语言分类: 1.DDL:数据定义语言 作用:定义和管理数据当中的各种对象 ...

随机推荐

  1. 【UOJ #105】【APIO2014】Beads and wires

    http://uoj.ac/problem/105 好神的dp啊. 确定一个点为根之后,蓝线只能是竖着的,不能横跨兄弟. 枚举每个点为根进行树形dp是\(O(n^2)\)的,\(f(x,0/1)\)表 ...

  2. PHP 笔记——操作MySQL数据库

    1. 连接MySQL服务器 ​ mysqli_connect :此函数是该函数的别名: mysqli::__construct() mysqli mysqli_connect ( [string se ...

  3. NTFS ADS带来的web安全问题

    有关ADS的简单说明请看http://www.xfocus.net/articles/200212/466.html 可以看到ADS在很久以前就被一些安全人员所关注,并且也提出了一些经典的利用,比如隐 ...

  4. python输入输出入门 A+B

    描述 求两个整数之和. 输入 输入数据只包括两个整数A和B. 输出 两个整数的和. 样例输入 1 2 样例输出  3 a=input().split() print(int(a[0])+int(a[1 ...

  5. Java后台直接生成二维码介绍

    Java后台直接生成二维码 1.其实jquery也可以直接生成二维码的,但我测试的时候,二维码生成后太模糊,难以识别.所以在这里介绍在后来生成二维码的方式. 2.不善于文字描述,直接上代码了. imp ...

  6. c# -- 实现浏览功能(备忘)

    最近在做系统的时候,要实现浏览功能,但是由于本人记性一般,每次写完就忘,所以还是写篇随笔,备忘一下,方便以后查看@_@# 实现功能大概如下: 按钮1:点击浏览按钮后,选择文件(类型为.txt),默认位 ...

  7. C# -- 学习笔记之基础篇

    由于要做一个系统,需要用到搜索引擎开发的很多知识点.对于开发语言的选择,我一般不是擅长什么才选择什么的,而是通过对比之后,考虑开发时间和难易程度来选择.尽管现在的开发经验还不足,也只能凭借自己弱弱的判 ...

  8. 2015 UESTC 搜索专题J题 全都是秋实大哥 kmp

    全都是秋实大哥 Time Limit: 20 Sec  Memory Limit: 256 MB 题目连接 http://acm.uestc.edu.cn/#/contest/show/61 Desc ...

  9. python画激活函数图像

    导入必要的库 import math import matplotlib.pyplot as plt import numpy as np import matplotlib as mpl mpl.r ...

  10. Buck converter uses low-side PWM IC

    The most common switching-power topology is a buck converter, which efficiently transforms high volt ...