Ch4 PL/SQL数据更改和管理事务
2014-08-26 21:32
477 查看
DML 隐式游标(如下) 单行DQL 隐式或显式游标 多行DQL 显式游标
隐式游标
%FOUND 指出了当PL/SQL代码最后从游标的结果集中获取记录时,找到了记录。
%NOTFOUND 指出了当PL/SQL代码最后从游标的结果集中获取记录时,结果集中没有记录。
%ROWCOUNT 返回当前时刻还没有从游标中获取的记录数量。
%ISOPEN 对于隐式游标而言,属性%ISOPEN的值总是false,这是因为隐式游标在DML语句执行时打开,结束时就立即关闭。
下右图中可以returning代替return,效果一样
若集合类型returning a(单量) bulk collect into b(集合类型,不加下标) 再用for indx in b.first..b.last 得到b.(indx)的值
![](http://img4.ph.126.net/vd1X3G6ZusWFOPjEy0XvZw==/6597885604284561704.jpg)
批量DML——forall 下右边效率高 其隐式游标一样 但影响1到多则true
![](http://img8.ph.126.net/s4GO3d1hc4SQrcRvIBUQ_A==/6597618422959004378.jpg)
数据库事务
一组SQL语句组成的一个逻辑单元看作数据库事务,具有(ACID)原子性(atomicity) 、一直性(consistency)、隔离性(isolation) 、持久性(durability)。若一个事务有问题则所有回滚(rollback),所有成功则提交(commit),提交后不可回滚。
事务处理:1、开始事务DML和DQL 2、执行SQL语句 3、提交事务,DDL、DCL自动提交,commit或commit commit a;(少于50字符)
4、回滚事务,可以savapoint a;在rollback to savapoint a;
数据库中的锁 1、内部锁或闩(自动创建和释放) 2、DDL锁(使用时自动创建) 3、DML(事务开始时创建)
锁粒度 行级锁(TX) 表级锁(TM) 数据库级锁
事务隔离级别 有效保证并发读取数据的正确性
脏读(Dirty Reads)一个事务开始读取了某行数据,但是另外一个事务已经更新了此数据但没有能够及时提交。
不可重复读(Non-repeatable Reads)一个事务对同一行数据重复读取两次,但是却得到了不同的结果。
1、未授权读取 也称为读未提交(Read Uncommitted):允许脏读取,但不允许更新丢失。如果一个事务已经开始写数据,则另外一个数据则不允许同时进行写操作,但允许其他事务读此行数据。该隔离级别可以通过“排他写锁”实现。
2、授权读取 也称为读提交(Read Committed):允许不可重复读取,但不允许脏读取。这可以通过“瞬间共享读锁”和“排他写锁”实现。读取数据的事务允许其他事务继续访问该行数据,但是未提交的写事务将会禁止其他事务访问该行。oracle支持
3、可重复读取 可重复读取(Repeatable Read):禁止不可重复读取和脏读取,但是有时可能出现幻影数据。
4、序列化(Serializable)或可串行读:提供严格的事务隔离。它要求事务序列化执行,事务只能一个接着一个地执行,但不能并发执行。 oracle支持
防止死锁 1、最低事务隔离 2、保持事务尽可能短 3、事务内部按一定顺序访问数据库对象 4、等待用户输入时不要让事务持续打开
隐式游标
%FOUND 指出了当PL/SQL代码最后从游标的结果集中获取记录时,找到了记录。
%NOTFOUND 指出了当PL/SQL代码最后从游标的结果集中获取记录时,结果集中没有记录。
%ROWCOUNT 返回当前时刻还没有从游标中获取的记录数量。
%ISOPEN 对于隐式游标而言,属性%ISOPEN的值总是false,这是因为隐式游标在DML语句执行时打开,结束时就立即关闭。
下右图中可以returning代替return,效果一样
若集合类型returning a(单量) bulk collect into b(集合类型,不加下标) 再用for indx in b.first..b.last 得到b.(indx)的值
![](http://img4.ph.126.net/vd1X3G6ZusWFOPjEy0XvZw==/6597885604284561704.jpg)
批量DML——forall 下右边效率高 其隐式游标一样 但影响1到多则true
![](http://img8.ph.126.net/s4GO3d1hc4SQrcRvIBUQ_A==/6597618422959004378.jpg)
数据库事务
一组SQL语句组成的一个逻辑单元看作数据库事务,具有(ACID)原子性(atomicity) 、一直性(consistency)、隔离性(isolation) 、持久性(durability)。若一个事务有问题则所有回滚(rollback),所有成功则提交(commit),提交后不可回滚。
事务处理:1、开始事务DML和DQL 2、执行SQL语句 3、提交事务,DDL、DCL自动提交,commit或commit commit a;(少于50字符)
4、回滚事务,可以savapoint a;在rollback to savapoint a;
数据库中的锁 1、内部锁或闩(自动创建和释放) 2、DDL锁(使用时自动创建) 3、DML(事务开始时创建)
锁描述 | 解释 | SQL操作 |
S(Share) | 共享锁 | Create index、Lock share 如:Lock Table TableName In Share Mode |
X(Exclusive) | 排它锁 | Alter table、Drop able、Drop index、Truncate table 、Lock exclusive 如:Lock Table TableName In Exclusive Mode; |
RS(Row-S) | 行级共享锁,其他对象只能查询这些数据行 | Select for update、Lock for update、Lock row share 如:LOCK TABLE TableName IN ROW SHARE MODE; |
SX(Row-X) | 行级排它锁,在提交前不允许做DML操作 | Insert、Update、Delete、Lock row share 如:LOCK TABLE TableName IN ROW EXCLUSIVE MODE; |
SSX(S/Row-X) | 共享行级排它锁 | Lock Table TableName In Share Row Exclusive Mode; |
事务隔离级别 有效保证并发读取数据的正确性
脏读(Dirty Reads)一个事务开始读取了某行数据,但是另外一个事务已经更新了此数据但没有能够及时提交。
不可重复读(Non-repeatable Reads)一个事务对同一行数据重复读取两次,但是却得到了不同的结果。
1、未授权读取 也称为读未提交(Read Uncommitted):允许脏读取,但不允许更新丢失。如果一个事务已经开始写数据,则另外一个数据则不允许同时进行写操作,但允许其他事务读此行数据。该隔离级别可以通过“排他写锁”实现。
2、授权读取 也称为读提交(Read Committed):允许不可重复读取,但不允许脏读取。这可以通过“瞬间共享读锁”和“排他写锁”实现。读取数据的事务允许其他事务继续访问该行数据,但是未提交的写事务将会禁止其他事务访问该行。oracle支持
3、可重复读取 可重复读取(Repeatable Read):禁止不可重复读取和脏读取,但是有时可能出现幻影数据。
4、序列化(Serializable)或可串行读:提供严格的事务隔离。它要求事务序列化执行,事务只能一个接着一个地执行,但不能并发执行。 oracle支持
防止死锁 1、最低事务隔离 2、保持事务尽可能短 3、事务内部按一定顺序访问数据库对象 4、等待用户输入时不要让事务持续打开
相关文章推荐
- PL/SQL程序控制结构及在PL/SQL中更改数据和管理事务
- PL/SQL更改数据和管理事务
- PL/SQL更改数据和管理事务
- 4.PL/SQL更改数据和管理数据库
- Oracle PL/SQL 程序设计读书笔记 - 第14章 DML和事务管理
- PLSQL更改数据及管理事务
- oracle 数据库的管理工具 PL/SQL_Developer 的简易使用 与Java 连接并查询显示出数据
- Oracle学习笔记(4) 在PLSQL中更改数据和管理事务
- PLSQL更改数据及管理事务
- PLSQL更改数据及管理事务
- 源码-PL/SQL从入门到精通-第五章-管理数据表
- PL/SQL 一个数据对象一个事务(且记录错误信息到处理对象)(rollback,submit)
- Oracle学习笔记(第四章) 在PLSQL中更改数据和管理事务
- [Oracle]在PL/SQL中更改数据和使用游标获取数据
- PL/SQL数据类型和效率分析
- [Oracle PL/SQL]当数据表设计成具有父ID的时候,当需要选择所有与父ID同根生的所有节点的时候,使用的SQL语句
- PL/SQL的数据类型和常用函数
- 项目管理、DevExpress、集成测试、Soa、pl/sql、2006年的积累
- ORACLE 存储过程及TABLE里的数据用PL/SQL备份及用PLUS SQL还原
- PL/SQL数据类型及操作符