当前位置: 首页 > news >正文

Oracle附录——Oracle事务

一、事务的定义

  事务是由一组SQL语句组成的单个逻辑工作单元,这些SQL语句要么全部执行成功,要么全部执行失败。

二、事务的重要性

  一般在程序的使用中,将由多条SQL语句共同组成一个程序的功能,在没有事务的情况下,其中任何一条SQL语句执行错误都有可能造成数据库内数据的不

  准确,影响程序的运行,给用户带来不好的影响,造成巨大的损失。

三、事务的特性

  事务有四大特性,可简称为ACID,分别是原子性(Atomic)、一致性(Consistence)、隔离性(Isolation)、持久性(Durability)。

  1、原子性(Atomic)

    一个事务里面所有包含的SQL语句是一个执行整体,不可分割,要么都成功,要么都不成功。例如银行转账的操作,如果从转出操作执行失败,那么这

    个事务就已经执行失败,无论转入操作是否成功,所修改的数据都不会被提交到数据库。

  2、一致性(Consistence)

    一个事务执行前和执行后的数据应是一致的。例如银行转账的操作,转入的金额应和转出的金额一致,两个账户转账前后的资金总额应是一致的。

  3、隔离性(Isolation)

    在同一时刻应只有一个事务在对相应数据进行操作。例如,银行转账的操作,如果A账户在向B账户转账的时候,C账户也向B账户转账,那么C账户必须

    等待A账户转账完毕才可向B账户转账。

  4、持久性(Durability)

    当事务结束后,它对数据库中的影响应是永久的,即便系统遇到故障,数据也不会丢失。例如银行转账的操作,在一个转账操作完成后,此次转账操作

    会被记录下来,即使银行系统故障了,也能恢复数据。

四、事务的使用

  1、COMMIT

    执行COMMIT命令会确认事务的变化,结束事务,删除保存点,释放锁,其它会话将可以查看到事务变化后的新数据。

  2、SAVEPOINT

    执行SAVEPOINT命令会创建一个保存点,使用保存点可以方便的撤销所做的部分事务而不必全部撤销。

  3、ROLLBACK

    执行ROLLBACK命令可以回滚部分或全部事务,当回滚全部事务时,会结束事务,删除保存点,释放锁。

  具体使用方法请看示例:

--创建users表
CREATE TABLE users
    (
        id NUMBER(5) PRIMARY KEY,
        name VARCHAR2(20),
        password VARCHAR2(20)
    );

--添加三条数据
INSERT INTO users VALUES (100,'张三','zhangsan');
INSERT INTO users VALUES (101,'李四','lisi');
INSERT INTO users VALUES (102,'王五','wangwu');

--执行COMMIT命令提交事务
COMMIT;

--查询所有数据,此时表存在三条数据,id为100,101,102
SELECT * FROM users;

--删除id为100的数据
DELETE FROM users WHERE id=100;

--设置保存点point_a
SAVEPOINT point_a;

--删除id为101的数据
DELETE FROM users WHERE id=101;

--查询所有数据,此时表只剩下id为102的数据
SELECT * FROM users;

--回滚到保存点point_a
ROLLBACK TO point_a;

--查询所有数据,表中有两条数据,id为101和102,删除id为101的命令被撤销
SELECT * FROM users;

--回滚全部事务
ROLLBACK;

--查询所有数据,表中有三条数据,id为100,101,102,本次事务所执行的所有修改被回滚
SELECT * FROM users;
事务使用示例

   注意:事务的提交和回滚尽量显示的进行,而不是让数据库自动提交或回滚事务(当会话结束或执行DDL语句时,之前未提交的事务将被提交),因为自

   动提交事务可能会引发各种问题,因此,在一组DML命令之后应紧随着COMMIT或ROLLBACK。

转载于:https://www.cnblogs.com/shangshan/p/6380019.html

相关文章:

  • 微信小程序 view 布局
  • 首篇
  • 查看数据库字符集
  • vagrant 添加本地 box 安装 laravel homestead
  • eclipse(luna)创建web工程
  • Vim 折腾记
  • $.ajax()
  • 用Zookeeper实现分布式锁和选主
  • 最近5年183个Java面试问题列表及答案[最全]
  • cloudbase-init 自动扩盘的副作用 - 每天5分钟玩转 OpenStack(154)
  • Android笔记--TCP Scoket(字符串收发)
  • HTML5 自定义属性 dataset
  • 一步一步学Python(2) 连接多台主机执行脚本
  • MySQL添加用户、删除用户与授权
  • C#中HttpWebRequest的用法详解
  • android图片蒙层
  • angular2开源库收集
  • Bootstrap JS插件Alert源码分析
  • - C#编程大幅提高OUTLOOK的邮件搜索能力!
  • in typeof instanceof ===这些运算符有什么作用
  • learning koa2.x
  • Node项目之评分系统(二)- 数据库设计
  • python大佬养成计划----difflib模块
  • 基于阿里云移动推送的移动应用推送模式最佳实践
  • 每个JavaScript开发人员应阅读的书【1】 - JavaScript: The Good Parts
  • 面试遇到的一些题
  • 深入浅出Node.js
  • 消息队列系列二(IOT中消息队列的应用)
  • FaaS 的简单实践
  • Java性能优化之JVM GC(垃圾回收机制)
  • ​MySQL主从复制一致性检测
  • #stm32整理(一)flash读写
  • #基础#使用Jupyter进行Notebook的转换 .ipynb文件导出为.md文件
  • $.ajax()
  • (31)对象的克隆
  • (C语言)二分查找 超详细
  • (LNMP) How To Install Linux, nginx, MySQL, PHP
  • (PWM呼吸灯)合泰开发板HT66F2390-----点灯大师
  • (ros//EnvironmentVariables)ros环境变量
  • (办公)springboot配置aop处理请求.
  • (附源码)springboot掌上博客系统 毕业设计063131
  • (含react-draggable库以及相关BUG如何解决)固定在左上方某盒子内(如按钮)添加可拖动功能,使用react hook语法实现
  • (原創) 如何安裝Linux版本的Quartus II? (SOC) (Quartus II) (Linux) (RedHat) (VirtualBox)
  • (源码版)2024美国大学生数学建模E题财产保险的可持续模型详解思路+具体代码季节性时序预测SARIMA天气预测建模
  • .halo勒索病毒解密方法|勒索病毒解决|勒索病毒恢复|数据库修复
  • .NET CORE使用Redis分布式锁续命(续期)问题
  • .NET I/O 学习笔记:对文件和目录进行解压缩操作
  • .Net8 Blazor 尝鲜
  • .net操作Excel出错解决
  • .net解析传过来的xml_DOM4J解析XML文件
  • .Net转Java自学之路—基础巩固篇十三(集合)
  • /bin、/sbin、/usr/bin、/usr/sbin
  • @angular/cli项目构建--http(2)
  • @DateTimeFormat 和 @JsonFormat 注解详解
  • @Service注解让spring找到你的Service bean