Oracle PL/SQL 程序设计读书笔记 - 第14章 DML和事务管理

Oracle PL/SQL 程序设计读书笔记 - 第14章 DML和事务管理

ACID原则:即一个事务具有原子性、一致性、隔离性和持久性。

  • 原子性:一个事务所涉及的改变是原子的:这些改变或者全部发生或者全部不发生。
  • 一致性:一个事务必须是一个正确的状态转换。事务中发生的行为作为一个整体不能违反状态的任何完整性约束。
  • 隔离性:很多个事务可以同时发生,不过从任何一个事务的角度来看,其他的事务看起来都是在它之前或之后发生的。
  • 持久性:一旦一个事务成功结束,状态的改变就是永久的了。可能经受住以后发生的任何故障。

14.1.1 DML语句快速入门。

共有4个DML语句:INSERT,UPDATE,DELETE,MERGE

14.1.2 DML操作游标属性

Oracle允许我们通过一些特殊的隐式游标属性访问最后一次运行的隐式游标的信息。 首先,记住隐式游标属性的值总是属于最后一次执行的SQL语句,而不管隐式游标是哪一个块中执行的。

  • SQL%FOUND 如果有一行或者多行记录被成功修改返回TRUE
  • SQL%NOTFOUND 如果DML语句没有修改任何行则返回TRUE
  • SQL%ROWCOUNT 返回被DML语句修改的记录行数
  • SQL%ISOPEN 对于隐式游标总是返回FALSE,因为ORACLE数据库会自动打开和关闭这些游标。

14.1.3 从DML语句返回信息

  • 可以在DML语句中加处RETURNING子句,而获得DML所操作的信息。可以通过BULK COLLECT语句返回一个集合。
  • 可以通过关键字ROW对一整条记录进行更新。

14.2 事务管理

14.2.1 COMMIT语句

COMMIT [WORK][COMMENT text];
  • WORK 是一个可选的关键字,主要用于改善代码的可读性。

14.2.2 ROLLBACK语句

ROLLBACK [WORK][TO [SAVEPOINT] savepoint_name]

14.2.3 SAVEPOINT语句

SAVEPOINT savepoint_name;

14.2.4 SET TRANSANCTION命令

  • SET TRANSACTION READY ONLY;

把当前事务定义成只读的

  • SET TRANSACTION READ WRITE;

把当前的事务定义成可读写的,并且这也是缺省的设置。

  • SET TRANSACTION ISOLATION LEVEL SERIALIZABLE | READ COMMITTED;
  • SET TRANSACTION USE ROLLBACK SEGMENT rollback_segment;

14.2.5 LOCK语句

LOCK TABLE table_reference_list IN lock_mode MODE [NOWAIT];

14.3 自治事务

如果把一个PL/SQL块定义成自治事务的,我们实际是把这个块中的DML语句和调用程序的事务环境完全的隔离开。这个块就成为一个由其他事务启动的独立的事务,前一个事务就被叫做主事务。

14.3.1 定义自治事务

PRAGMA AUTONOMOUS_TRANSACTION;

在声明单元加上上面语句就可以了。

14.3.2 自治事务的规则和限制

  • 如果自治事务要访问的资源已经被主事务持有,我们的程序就发生了死锁。
  • 我们不能只用一个PRAGMA声明就把一个包中的所有子程序全部标志成自治的。我们必须对位于包体的每个程序的声明单元都明确地指定自治事务。这个规则的一个后杲就是我们无法通过包规范来区分到底哪一个程序是自治事务的。
  • 如果想从一个已经执行了至少一个DML语句的自治事务程序没有任何错误的退出,我们必须明确地执行一个提交或者回滚。
  • COMMIT和ROLLBACK语句只是结束了活动的自治事务,但不会终止自治例程。
  • 我们只能回滚到当前会话内创建的保存点。如果是在一个自治事务中,我们就不能回滚到主事务创建的保存点。
  • 数据库参数文件中的TRANSACTIONS参数指定的是一个会话内可以并发的最大事务数量。默认是75。

14.3.3 事务的可见性

自治事务的缺少行为是,只要在自治事务中执行了COMMIT或者ROLLBACK,这些改变立即就对主事务可见。但如果这些改变后的信息不应该在主事务中看到。

SET TRANSACTION ISOLATION LEVEL SERIALIZABLE;

14.3.4 什么时候使用自治事务

  • 日志机制
  • 在数据库触发器中执行提交和回滚
  • 可重用的应用组件
  • 避免查询时出现突变表触发器错误
  • 在修改这个表的SQL中调用用户自定义函数
  • 重试计数器

转载于:https://www.cnblogs.com/tjpanda88/archive/2011/12/14/2287042.html

Oracle PL/SQL 程序设计读书笔记 - 第14章 DML和事务管理相关推荐

  1. Oracle PL/SQL 程序设计读书笔记 - 第7章 使用数据

    Oracle PL/SQL 程序设计读书笔记 - 第7章 使用数据 Oracle PL/SQL 程序设计读书笔记 - 第7章 使用数据 7.1 程序数据的命名 PL/SQL要求在给数据结构命名的时候应 ...

  2. oracle pl/sql 程序设计 历史笔记整理

    20131016 周三 oracle pl/sql 程序设计 第2章 创建并运行pl/sql代码 sqlplus yjkhecc/yjkhecc@10.85.23.92:1521/orcl 在java ...

  3. 《Oracle PL/SQL程序设计(第5版)》一一2.4 执行必要的PL/SQL任务

    本节书摘来自异步社区出版社<Oracle PL/SQL程序设计(第5版)>一书中的第2章,第2.4节,作者:[美]Steven Feuerstein , Bill Pribyl,更多章节内 ...

  4. 《Oracle PL/SQL程序设计(第5版)》一一2.5 编辑PL/SQL的环境

    本节书摘来自异步社区出版社<Oracle PL/SQL程序设计(第5版)>一书中的第2章,第2.5节,作者:[美]Steven Feuerstein , Bill Pribyl,更多章节内 ...

  5. 《Oracle PL/SQL程序设计(第5版)》一一1.6 一些建议

    本节书摘来自异步社区出版社<Oracle PL/SQL程序设计(第5版)>一书中的第1章,第1.6节,作者:[美]Steven Feuerstein , Bill Pribyl,更多章节内 ...

  6. ORACLE PL/SQL 实例精解之第二章 通用编程语言基础

    通用编程语言基础 2.1PL/SQL编程基础 1. 字符类型:支持四中类型字符:字母,数字,符号和空格,组合一个或多个字符就会创建一个词汇单元 2. 词汇单元 a.标识符必须以字符开头 b.保留字是p ...

  7. Oracle PL/SQL编程学习笔记:游标

    游标参考:http://www.cnblogs.com/sc-xx/archive/2011/12/03/2275084.html 1 create or replace procedure REGI ...

  8. Oracle PL/SQL编程学习笔记:Merge方法的使用

    Oracle11g的Merge很强大! 1 create or replace procedure BRANCE_REPORT_MERGE is 2 3 begin 4 Merge into BRAN ...

  9. APUE读书笔记-第14章-高级I/O

    14.1 引言 *高级I/O包括非阻塞I/O.记录锁.系统V流机制.I/O多路转换(select和poll函数).readv和writev函数以及存储映射I/O(mmap) 14.2 非阻塞I/O * ...

最新文章

  1. 这是从云栖大会指挥部发回的现场报道
  2. Struts Web应用程序开发步骤
  3. 临时手机验证码_实用网站(一)短信验证码 临时网盘 临时邮箱
  4. Linux 安装USB摄像头
  5. Linux 终端环境安装 L2TP 客户端
  6. Java设计模式之策略设计模式
  7. C++对于文件的相关操作 创建、读写、删除代码
  8. 在DataWorks中实现指定UDF只能被指定账户访问
  9. android app唯一标识符,android 唯一识别码笔记
  10. phpMyAdmin安装配置方法全过程,及问题解决
  11. htc xv6950 刷机方法
  12. 计算机mac地址和另一台一样,电脑mac地址有多个怎么办
  13. PAT 甲级1116 1117 1118 1119 解题报告
  14. Ubuntu+Pytorch开发入门整理——环境搭建
  15. 一个穷苦大学毕业生的艰辛创业路
  16. 大数据指挥中心信息化方案
  17. 2022下半年软考成绩即将公布,附查分指南!
  18. 盘古分词 - 多元分词
  19. python生成随机数组_python3.x 生成3维随机数组实例
  20. 地图白话(二):地图数据

热门文章

  1. action 带参数跳转
  2. linux indent格式化代码
  3. 写段QTP脚本与大家一起分享
  4. Android RotateAnimation详解
  5. ViewGroup.LayoutParams
  6. Python基础学习----参数和返回值
  7. 站立会议(11月19日)
  8. angular组件--tips提示功能
  9. 官网3.15课程一起来“打价”,找群内管理员还可以折上折
  10. Convolutional Neural Networks for Visual Recognition 8