一、什么是事务
  数据库事务就是一组sql语句,这组sql语句是一个逻辑工作单元。我们可以认为事务就是一组不可分割的sql语句。在执行时,应该作为一个整体永久性地修改数据库的内容,或者作为一个整体取消对数据库的修改。

e.g. 事务的一个例子是银行转账:将钱从一个银行账号中转到另外一个银行账号中。此时通常包含两步操作:一条是update语句负责从一个银行账号的总额中减去一定的钱数,另一条update语句负责向另外一个银行账号中增加相应的钱数。这2个减少和增加的操作应该要么同时永久地保存到数据库中,要么全部取消——否则就
会有一部分钱丢失了。这个简单的例子只使用了2个update语句,然后实际中的事务要比这复杂很多:通常包含多个insert、update、delete等。

二、事务的回滚和提交
要永久地记录事务中sql语句的结果,需要执行commit语句,从而提交事务。要取消sql语句的结果,需要执行rollback语句,从而回滚(rollback)事务。rollback语句可以将行重新设置为原始状态。在执行回滚操作之前对数据库进行的任何修改操作都会被取消。条件是此前没有断开与数据库的连接。
配置config:
create user Ruying identified by miyake87
default tablespace users
temporary tablespace temp
/
GRANT connect, resource TO Ruying;
/
GRANT CREATE SESSION TO Ruying;
/
grant create table to Ruying;
/
create table product(
product_id number(10) primary key,
product_name varchar2(100) not null
)
/
insert into product
values(1,'花卉');
/
insert into product
values(2,'鬼脸嘟嘟')
/
insert into product
values(3,'pocky')
commit;
/
update product 
set product_name='好时巧克力'
where product_id=3
/
rollback;

SQL> select 
  2  *
  3  from product;
 
 PRODUCT_ID PRODUCT_NAME
          3 pocky
          1 花卉
          2 鬼脸嘟嘟
  
三、事务的开始与结束
     如前所述,事务是用来分隔数据库活动的逻辑工作单元。事务既有起点,也有终点:
 
 当下列事件之一发生时,事务就开始了:
 ①连接到数据库上,并执行第一条DML语句;
 ②前一个事务结束后,又输入另一个DML语句;
 
 当下列事件之一发生时,事务就结束了:
 ①执行commit或rollback语句;
 ②执行一条DDL语句。例如create table 语句;这种情况会自动commit;
 ③执行一条DCL语句,例如grant语句,也会自动commit;
 ④断开与数据连接:在退出sql*plus时候,通常会输入exit命令,此时会自动执行commit;
 如果sql*plus被意外终止了,那么会自动执行rollback。这适用于任何会访问数据的程序。例如,
 如果编写了一个可以访问数据库的java程序,而这个程序崩溃了,那么就会自动rollback。
 ⑤执行一条DML语句,该语句却失败了;会自动rolback.
     Tips:每个事务之后,都显式的执行rollback或者commit是很好的习惯;

四、事务保存点
    在事务中的任何地方都可以设置一个savepoint,这样可以将修改回滚到保存点处。如果有一个很大的事务,这将非常实用,譬如如果在保存点后进行了误操作,并不需要将整个事务一直回滚到最开头.saveponit不能乱用:调整一下事务的结构,将其转换为较小的事务。
例如:
select *
from product
where product_id in(1,2)
PRODUCT_ID   PRODUCT_NAME  PRICE
 1 花卉                                                                           1
          2 鬼脸嘟嘟                                                                         1
 
     SQL> update product
          set price=99
          where product_id=1
     SQL> savepoint save1;
 
 
 SQL> update product
          set price=66
          where product_id=2;
  
     SQL> select *
          from product
  where product_id in(1,2)
  
  PRODUCT_ID PRODUCT_NAME                                                               PRICE
          1 花卉                                                                             99
          2 鬼脸嘟嘟                                                                         66
  
  rollback to savepoint save1;

select *
         from product
 where product_id in(1,2)
        
 PRODUCT_ID PRODUCT_NAME                                                             PRICE
          1 花卉                                                                             99
          2 鬼脸嘟嘟                                                                         1
  ----------------------由此可见名为save1的savepoint之前的修改没有被回滚。

转载于:https://www.cnblogs.com/gracejiang/archive/2010/08/16/5890475.html

数据库事务的简单学习(一)相关推荐

  1. 数据库事务ACID原则学习分享

    本人结合自己对技术的理解,努力以通俗易懂的内容帮助大家了解技术的基本原理,内容仅供参考,不对或不完善的地方请大家指教,感谢关注! 一.事务概念的引入 当今,信息化技术非常发达的时代,我们通过手机上的银 ...

  2. mysql数据库事务命令_MySql学习18----数据库事务---命令使用(02)

    本篇讲述数据库中非常重要的事务概念和如何使用MySQL命令行窗口来进行数据库的事务操作.下一篇会讲述如何使用JDBC进行数据库的事务操作. 事务是指数据库中的一组逻辑操作,这个操作的特点就是在该组逻辑 ...

  3. 数据库事务的简单介绍

    事务和锁 一.什么是事务 事务是逻辑上的一组数据库操作,要么都执行,要么都不执行. 例子:假如张三要给李四转账200元,这个转账会涉及到两个关键操作就是:将张三的余额减少200元,将李四的余额增加20 ...

  4. Spring Boot中声明式数据库事务使用与理解

    JDBC的数据库事务 传统JDBC的数据库事务的一个示例如下代码所示,该示例仅为一个insertUser方法的数据库事务过程.可以看到,如果还存在很多其他的数据库事务需要,则需要编写很多类似于如下的代 ...

  5. mysql dba系统学习-数据库事务详解

    mysql dba系统学习-数据库事务详解 上个星期去面试数据库管理员的工作,笔试通过之后就是直接的面试,他问了我一个问题,叫我介绍哈数据库的事务的看法和理解,但是不知所错的没有章法的乱答一气,唉唉, ...

  6. 列举MySQL事务的隔离级别_mysql dba系统学习(22)数据库事务详解

    上个星期去面试数据库管理员的工作,笔试通过之后就是直接的面试,他问了我一个问题,叫我介绍哈数据库的事务的看法和理解,但是不知所错的没有章法的乱答一气,唉唉,基础不扎实啊. 下面来好好的学习哈mysql ...

  7. JDBC学习总结(二)JDBC操作Blob类型字段高效的批量插入JDBC处理数据库事务将多个SQL看成一个事务执行数据库连接池C3P0DBCPDruidDBUtils工具类实现CRUD

    JDBC学习总结(二)JDBC操作Blob类型字段/高效的批量插入/JDBC处理数据库事务/将多个SQL看成一个事务执行/数据库连接池C3P0/DBCP/Druid/DBUtils工具类实现CRUD ...

  8. mysql 事务补偿_TCC补偿性策略_彻底学习数据库事务 seata分布式事务 共享 排它锁 死锁 索引 Spring事务 隔离级别等_MySQL视频-51CTO学院...

    课程总计41课时,从什么是事务讲起,直到分布式事务解决方案,很的0基础基础与提升系列课程.对于难以理解的知识点,全部用画图+实战的方式讲解. 彻底明白事务的四个特性:原子性.一致性.隔离性.持久性,用 ...

  9. MySQL学习-MySQL数据库事务

    MySQL数据库事务 1.事务概述 1.什么是事务? 2.和事务相关的语句只有:**DML语句.(insert delete update)** 3.假设所有的业务都能使用1条DML语句搞定,还需要事 ...

最新文章

  1. python在匿名函数作和_跟光磊学Python开发-匿名函数函数和高阶函数
  2. python编码和解码_Python中的编码与解码(转)
  3. oracle 加全文索引,Oracle创建全文索引
  4. oracle实验四运动会,实验四oracle的安全性和完整性控制
  5. 机器学习笔记——深度学习入门篇
  6. 数据挖掘基础数学知识博客
  7. (21)FPGA移位寄存器设计(第5天)
  8. ruby基本语法(2)
  9. 寻找优秀的AI公司与受人尊敬的资本助推者 | 量子位年度评选进行时
  10. 7.运输层---UDP
  11. iOS 最新版 CocoaPods 的安装流程介绍
  12. POS58打印机的操作
  13. 【三维点云滤波】对三维点云空间数据进行滤波的matlab仿真
  14. 2018年世界杯助力优酷重返第一,也成为视频行业的分水岭
  15. 10.22T2 DSU算法
  16. 银行卡识别技术-移动支付新宠儿
  17. linux下载blast软件
  18. Win10系统Administrator忘记开机密码怎么办?
  19. 微信dat文件批量解密
  20. 模块电路选型(7)----人机交互模块

热门文章

  1. 改善服务器响应用时,服务器缓存论文,关于改善网络服务器响应速度建议相关参考文献资料-免费论文范文...
  2. Pytorch:循环神经网络-LSTM
  3. 2021暨南大学CTF新生杯(杂项篇)
  4. Redis可视化工具RDM安装包分享
  5. PHP写入数据库中文乱码问题
  6. 嵌入式Linux下基于FFmpeg的视频硬件编解码[图]
  7. Debian 、Arch、 Manjaro 的区别与使用感受
  8. 【实时PPP】对比CNES的实时数据流与CNT产品之间的差异
  9. 自制C语言密码加密代码
  10. JSP..由sun公司提供的动态web资源开发技术