oracle事务(转)
今天温习oracle事务,记录如下:
- 事务定义
- 原子性 (Atomicity) :一个事务里面所有包含的SQL语句是一个执行整体,不可分割,要么都做,要么都不做
- 一致性 (Consistency) :事务开始时,数据库中的数据是一致的,事务结束时,数据库的数据也应该是一致的
- 隔离性 (Isolation): 多个事务并发的独立运行,而不能互相干扰,一个事务修改,新增,删除数据在根据当前事务的事务隔离级别基础上,其余事务能看到相应的结果(这里为什么这么说,下面我会给我具体的例子进行分析)
- 持久性 (Durability) : 事务被提交后,数据会被永久保存
- COMMIT 提交事务
- SAVEPOINT 事务保存点 (savepoint a)
- ROLLBACK(TO) 回滚[回滚到定义的保存点] rollback to a
- 共享锁(表锁)共享锁有一下几种模式
- 行共享模式 : 不运行其它用户插入,删除,更新操作,多个用户可以同时作用于该表,都能查询。语法如下:Lock table XX in share mode
- 行共享更新模式 : 允许多个用户同时锁定表中不同的行,能执行DML语句,除了那些被锁定的行。
- 排他锁(行锁): 不允许其它用户对该表插入,删除,修改操作,只能查询,同时其它用户不能修改和锁定表
- 死锁 : 所个事务对资源的相互等待,造成死锁。
- 未提交读 (READ UNCOMMITTED) 幻想读、不可重复读和脏读都允许。
- 提交读 (READ COMMITTED) 允许幻想读、不可重复读,不允许脏读。
- 重复读 (REPEATABLE READ) 允许幻想读,不允许不可重复读和脏读。
- 序列化 (SERILIZABLE) 幻想读、不可重复读和脏读都不允许。
- 幻想读(幻读): 事务T1读取一条指定where条件的语句,返回结果集。此时事务T2插入一行新记录,恰好满足T1的where条件。然后T1使用相同的条件再次查询,结果集中可以看到T2插入的记录,这条新纪录就是幻想。
- 脏读: 事务T1修改了一条数据,但是还未提交,事务T2恰好读取到了这条修改后了的数据,此时T1将事务回滚,这个时候T2读取到的数据就是脏数据,称为脏读。
- 不可重复读取:事务T1读取一行记录,紧接着事务T2修改了T1刚刚读取的记录,然后T1再次查询,发现与第一次读取的记录不同,这称为不可重复读。
- READ COMMITTED
- 这是ORACLE缺省的事务隔离级别。
- 事务中的每一条语句都遵从语句级的读一致性。
- 保证不会脏读;但可能出现非重复读和幻像。
- SERIALIZABLE
- 简单地说,serializable就是使事务看起来象是一个接着一个地顺序地执行。
- 仅仅能看见在本事务开始前由其它事务提交的更改和在本事务中所做的更改(也就是说其它事务在本事务开始后所做的修改,即使提交了,本事务也看不到)
- 保证不会出现非重复读和幻像。
- Serializable隔离级别提供了read-only事务所提供的读一致性(事务级的读一致性),同时又允许DML操作.
- 设置隔离级别
- 设置一个事务的隔离级别
- SET TRANSACTION ISOLATION LEVEL READ COMMITTED;
- SET TRANSACTION ISOLATION LEVEL SERIALIZABLE;
- SET TRANSACTION READ ONLY;
- 设置单个会话的隔离级别
- ALTER SESSION SET TRANSACTION ISOLATION LEVEL READ COMMITTED;
- ALTER SESSION SET TRANSACTION ISOLATION SERIALIZABLE;
- 设置一个事务的隔离级别
- 准备SQL
- create table A(
- id int,
- name varchar2(50),
- primary key(id)
- );
- 演示一个T1插入,T2读取数据

- T1提交事务后,T2可以看到数据

- 我们看到了事务隔离级别的效果,那么T1,T2事务执行时,oracle怎么设置这两个事务的锁的呢?我们来看一下这个操作

- 当T1提交后,T2修改表A成功

- 演示2个事务,T1更新表A的数据,T2删除表2的数据

- 下面将T1提交,T2得到执行

- T1提交后的情况

- 演示事务的隔离级别
- T1事务设置隔离级别为SERIALIZABLE,T2为默认级别

- 有的朋友可能会问,是不是T2未提交造成的,那么我们将T2提交后的结果如下

- 我们看看T3的查询结果

- 由上述结果我们可以知道,如果事务设定了序列化的隔离级别,那么在该事务期间,其它事务对该事物中引用的资源修改将不可见。
好了,今天的总结到此,还会有后续文章
oracle事务(转)的更多相关文章
- Oracle事务
Oracle事务的ACID特性 原子性Atomicity:事务中的所有动作要么都发生,要么都不发生. 一致性Consistency:事务将数据库从一种状态转变为下一种一致状态. 隔离性Isolatio ...
- 浅谈Oracle事务【转载竹沥半夏】
浅谈Oracle事务[转载竹沥半夏] 所谓事务,他是一个操作序列,这些操作要么都执行,要么都不执行,是一个不可分割的工作单元.通俗解释就是事务是把很多事情当成一件事情来完成,也就是大家都在一条船上,要 ...
- Oracle事务之一:锁和隔离
Oracle事务之一:锁和隔离 一. 事务概述 事务管理是数据库处理的核心.数据库既要保证用户能并发地执行事务,还要保证数据库的一致性. 当第一条可执行的SQL开始执行,就隐形地开始了一个事务,直到遇 ...
- oracle事务和锁
数据库事务概括 1. 说明 一组SQL,一个逻辑工作单位,执行时整体修改或者整体回退. 2.事务相关概念 1)事务的提交和回滚:COMMIT/ROLLBACK 2)事务的开始和结束 开始事务:连接到数 ...
- oracle事务和锁(转)
If you use a SET TRANSACTION statement, then it must be the first statement in your transaction. How ...
- oracle 事务 与 提交
Oracle事务 一般事务(DML)即数据修改(增.删.改)的事务事务会将所有在事务中被修改的数据行加上锁(行级锁),来阻止其它人(会话)同时对这些数据的修改操作.当事务被提交或回滚后,这些数据才会被 ...
- Oracle事务隔离级别处理差异
Oracle事务隔离是事务读操作不同程度的数据隔离,分为READ_UNCOMMITTED.READ_COMMITTED(默认).SERIALIZABLE. Oracle事务隔离级别SERIALIZAB ...
- Oracle事务与锁
Oracle事务与锁 2017-12-13 目录 1 数据库事务概括 1.1 事务定义 1.2 事务生命周期 1.3 事物的特性 1.4 死锁2 事务相关语句 2.1 事务相关语句概括 2 ...
- 转:oracle 事务
原文地址:http://blog.csdn.net/junmail/article/details/5556561 关于Oracle事务的总结 1.什么是事务,事务的特性是什么? 事务的任务便是使数据 ...
随机推荐
- 4部门明确软件IC产业企业所得税优惠政策
中国证券网讯 据财政部5月9日消息,财政部.国家税务总局.发展改革委.工业和信息化部联合发布关于软件和集成电路产业企业所得税优惠政策有关问题的通知.该通知自2015年1月1日起执行. 通知指出,按照& ...
- premake在Ubuntu和GCC环境下创建简单的C++工程
由于premake基于lua脚本,为了方便编辑lua脚本,我在emacs24中利用package system安装了lua-mode. 然后创建config.lua文件,填入下面这段,主要来自:htt ...
- php导出excel数据
提供两种导出excel方法 1 最简单的导出excel header('Content-Type: application/vnd.ms-excel'); //设置文件类型 也可以将 vnd.ms ...
- oracle for update和for update nowait(for update wait)的区别
1.for update 和 for update nowait 的区别: 1.oracle 中执行select 操作读取数据不会有任何限制,当另外一个进程在修改表中的数据,但是并没有commit,所 ...
- cocos2d学习笔录1
CCDirector的主要作用: 1.访问和改变场景: 2.访问cocos2d-x的配置细节 3.访问视图(OPENGL,UIVIEW,UIWINDOW): 4.暂停,恢复和结束游戏: 5.在UIKi ...
- Android手机怎样录制屏幕及转GIF
有时候我们须要录制Android 手机的屏幕,比方写了一个Demo应用,须要公布到博客和微博上. 例如以下是我录制转GIF的效果图 对于Android4.4的上的手机,系统自带了一个命令screenr ...
- 挑战一下吧!C#测试开发工程师英语面试题
1. Given a rectangular (cuboidal for the puritans) cake with a rectangular piece removed (any size o ...
- 查看 ios 真机调试log,导出log
使用Xcode 在模拟器李敏运行的时候,可以直接通过xcode 查看log,但是真机测试的时候,xcode 却无法获取到,对于日志输出,可以先保存到真机上,之后通过iTunes 导出即可 修改源码 此 ...
- uva 699
#include <iostream> #include <cstdio> #include <cmath> #include <cstring> #i ...
- python实现PKCS5Padding
python实现PKCS5Padding python实现PKCS5Padding 2008-09-21 请参考 ssl-3-padding-mode php的加密函 ...