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:数据定义语言 作用:定义和管理数据当中的各种对象 ...
随机推荐
- 理解裸机部署过程ironic
部署物理机跟部署虚拟机的概念在nova来看是一样,都是nova通过创建虚拟机的方式来触发,只是底层nova-scheduler和nova-compute的驱动不一样.虚拟机的底层驱动采用的libvir ...
- ssvm和console 模板机 连接不上管理节点
说明: cloudstack 版本http://www.shapeblue.com/packages/ 并不是官方的 systemvm64template-4.6.0-vmware.ova 官 ...
- Scrapy实战篇(六)之Scrapy配合Selenium爬取京东信息(上)
在之前的一篇实战之中,我们已经爬取过京东商城的文胸数据,但是前面的那一篇其实是有一个缺陷的,不知道你看出来没有,下面就来详细的说明和解决这个缺陷. 我们在京东搜索页面输入关键字进行搜索的时候,页面的返 ...
- [NOI2014]购票 --- 斜率优化 + 树形DP + 数据结构
[NOI2014]购票 题目描述 今年夏天,NOI在SZ市迎来了她30周岁的生日. 来自全国 n 个城市的OIer们都会从各地出发,到SZ市参加这次盛会. 全国的城市构成了一棵以SZ市为根的有根树,每 ...
- [CSAcademy]Squared Ends
[CSAcademy]Squared Ends 题目大意: 给你一个长度为\(n(n\le10^4)\)的数列\(\{A_i\}(A_i\le10^6)\).定义区间\(A_{[l,r]}\)的代价为 ...
- hdu 3681 压缩dp+搜索
题意:一个机器人想越狱,他只能带一定电量的电池,'S'表示道路可行,'G'表示充电器, 只可充电一次,但是可以经过很多次.'F'表示起点,'Y'表示要破坏的机关,也是只能破坏一次,但是可以经过无数次. ...
- 树形DP--codevs 1380 没有上司的舞会
codevs 1380 没有上司的舞会 变式题目:给定一棵树每个点有一个点权,求一个独立集使得点权和最大,树上的独立集指的是选取树上的点,使尽量多的点不直接相连 时间限制: 1 s 空间限制: 1 ...
- 内功心法 -- java.util.LinkedList<E> (1)
写在前面的话:读书破万卷,编码如有神--------------------------------------------------------------------下文主要对java.util ...
- 转:IntelliJ IDEA 2016.1.3注册破解激活
IntelliJ IDEA 2016.1.3下载地址 https://download.jetbrains.8686c.com/idea/ideaIU-2016.1.3.exe 用注册码激活: 激活码 ...
- mui 图片预览
1. 图片放大滑动预览需要 mui.zoom.js mui.previewimage.js 2. 调用 mui.previewImage(); 3. 滑动过程中禁止图片缩放 注释掉下面代 ...