博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Oracle附录——Oracle事务
阅读量:7231 次
发布时间:2019-06-29

本文共 1823 字,大约阅读时间需要 6 分钟。

一、事务的定义

  事务是由一组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,102SELECT * FROM users;--删除id为100的数据DELETE FROM users WHERE id=100;--设置保存点point_aSAVEPOINT point_a;--删除id为101的数据DELETE FROM users WHERE id=101;--查询所有数据,此时表只剩下id为102的数据SELECT * FROM users;--回滚到保存点point_aROLLBACK 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

你可能感兴趣的文章
【树莓派智能门锁】使用脚本控制GPIO来开锁【4】
查看>>
转载---- 使用opencv源码自己编制android so库的过程
查看>>
vue 构建项目遇到的问题
查看>>
JAVA线程调度的优先级
查看>>
java中的内部类
查看>>
什么是死锁和如何解决死锁
查看>>
iOS:switch case中报错expected expression
查看>>
转 抽象类和接口联系与区别
查看>>
NSUserDefaults读取和写入自定义对象(转载)
查看>>
成员变量与静态变量的区别
查看>>
找出1-100中缺失的两个数
查看>>
Work with Unicode, CCSID & DBCS
查看>>
scanf()总结--从网上收来的,感觉很好,用来提醒自己,c语言真是博大精深!!【转】...
查看>>
Linux环境下段错误的产生原因及调试方法小结【转】
查看>>
Linux进程上下文切换过程context_switch详解--Linux进程的管理与调度(二十一)【转】...
查看>>
ubantu系统安装ssh
查看>>
js实现对上传图片的路径转成base64编码,并且对图片进行压缩,实现预览功能...
查看>>
LeetCode OJ:Multiply Strings (字符串乘法)
查看>>
LeetCode OJ:Search in Rotated Sorted Array(翻转排序数组的查找)
查看>>
VLC打开.264文件
查看>>