SQL语言 之 事务控制
一、概述
事务是一些数据库操作的集合,这些操作由一组相关的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语言 之 事务控制的更多相关文章
- oracle-SQL语言基础-事务控制命令命令
事务控制命令命令 COMMITROLLBACKSAVEPOINTSET TRANSACTION 当第一条可执行的SQL语句开始执行,数据库事务就开始.随着下面任一事件发生,数据库事务结束:执行COMM ...
- SQL批处理与事务控制
今天我想要分享的是关于数据库的批处理与事务的控制.批处理对于项目的实际应用有非常大的具体意义. 一.批处理部分 首先我们新建一个表: create table t3( id int primary k ...
- 数据库系统学习(八)-SQL语言与数据库完整性和安全性
第八讲 SQL语言与数据库完整性 重难点 数据库完整性的概念 关系数据库 防止和避免数据库中不合理数据的出现 输入错误,操作失误,程序处理错误等 完整性约束条件的一般形式 对O操作集合,当出现A情况时 ...
- SQL 语言 - 数据库系统原理
SQL 发展历程 从 1970 年美国 IBM 研究中心的 E.F.Codd 发表论文到 1974 年 Boyce 和 Chamberlin 把 SQUARE 语言改为 SEQUEL 语言,到现在的 ...
- SQL语言分类
SQL语言共分为四大类:数据查询语言DQL,数据操纵语言DML, 数据定义语言DDL,数据控制语言DCL. 1 数据查询语言DQL数据查询语言DQL基本结构是由SELECT子句,FROM子句,WHER ...
- MySQL中的SQL语言
从功能上划分,SQL 语言可以分为DDL,DML和DCL三大类.1. DDL(Data Definition Language)数据定义语言,用于定义和管理 SQL 数据库中的所有对象的语言 :CRE ...
- 数据库与SQL语言
数据库(DB) :长期储存在计算机中.有组织.可共享的数据的集合. 特点:(1)数据按一定的数据模型组织.描述和储存:(2)较小的冗余度:(3)数据独立性较高:(4)易扩展:(5)可共享(不同用户可按 ...
- [SQL]SQL语言入门级教材_SQL数据操作基础(二)
SQL数据操作基础(初级) netnova 于 -- :: 加贴在 数据库探讨: 为了建立交互站点,你需要使用数据库来存储来自访问者的信息.例如,你要建立一个职业介绍服务的站点,你就需要存储诸如个人简 ...
- SQL语言简介
什么是SQL语言? 是高级非过程化语言(是沟通数据库服务器和客户端的工具) 作用:存取,查询,更新和管理关系数据库系统 SQL语言分类: 1.DDL:数据定义语言 作用:定义和管理数据当中的各种对象 ...
随机推荐
- 【BZOJ 1853】 1853: [Scoi2010]幸运数字 (容斥原理)
1853: [Scoi2010]幸运数字 Time Limit: 2 Sec Memory Limit: 64 MBSubmit: 2472 Solved: 911 Description 在中国 ...
- HDU 1011 Starship Troopers 树形+背包dp
http://acm.hdu.edu.cn/showproblem.php?pid=1011 题意:每个节点有两个值bug和brain,当清扫该节点的所有bug时就得到brain值,只有当父节点被 ...
- 【20181027T3】山河令【DP套DP】
原题 [错解] 一眼DP 哎好像能删成奇形怪状的 弃疗,主要是没时间了 [正解] 神仙DP 明显先设\(f(i,j)\)表示把\([i,j]\) 取完的最小代价 然后发现转移不了,因为可以拿很多块 但 ...
- URAL 1995 Illegal spices 贪心构造
Illegal spices 题目连接: http://acm.timus.ru/problem.aspx?space=1&num=1995 Description Jabba: Han, m ...
- Theme.AppCompat无全屏主题解决办法
V7包中的Theme.AppCompat主题系列中并没有全屏样式,这个是为什么,只有作者知道…… 解决办法: 自定义主题 <style name="Theme.AppCompat.Li ...
- 配置druid内置的log实现
Druid不依赖任何的log组件,但支持多种log组件,会根据检测当前环境,选择一种合适的log实现. log的优先顺序 log4j -> log4j2 -> slf4j -> co ...
- 获取android-5.0.2_r1代码6.7G
获取 android-5.0.2_r1 源代码的坎坷路: 服务器相关 ====== * 国外服务器直接拉取,我一共有多个国外服务器,在获取android代码时下载速度都能到10MB/s的下载速度甚至更 ...
- hibernate将connection放进threadlocal里实现数据库连接池
Why ThreadLocal? 无论如何,要编写一个多线程安全(Thread-safe)的程序是困难的,为了让线程共享资源,必须小心地对共享资源进行同步,同步带来一定的效能延迟,而另一方面,在处理同 ...
- 介紹 IIS 8 全新的 HttpPlatformHandler 模組與 ASP.NET 5 Beta8 重大變更
HttpPlatformHandler 是一個支援 IIS 8 與 IIS 8.5 的原生模組 (native module),主要使用於 Microsoft Azure Websites 網站服務中 ...
- [Hive]使用HDFS文件夹数据创建Hive表分区
描写叙述: Hive表pms.cross_sale_path建立以日期作为分区,将hdfs文件夹/user/pms/workspace/ouyangyewei/testUsertrack/job1Ou ...