一、事务

  1.1事务概念

  事务处理可以用来维护数据库系统数据的完整性,它保证一组SQL语句要么全部都执行,

  要么全部都不执行。(例如一批SQL语句,只要有一个执行失败就全部不执行,即回到失败前的状态

  只有全部成功才会执行)。

  

  例如A向B转账500块钱,先从A账户中扣除500,然后再再B账户中加500.

  执行更新语句时,将A账户钱扣除500了,然后先B账户添加500的语句出错,即没收到钱。

  此时A的钱被扣除了,B也没收到钱。这样显然是不行的,必须保证既然扣了钱就一定要转到,

  或者没有转到就不要扣钱。

  事务可以保证这样一组操作的稳定,使一组操作当成一个整体,使其具有原子性。

  1.2执行事务

  事务开始:begin;

  语句1

  语句2

    ...  

  commit

  begin用于指定事务开始,commit用于手动提交事务。

  之前写的SQL语句都是隐式的提交,即数据库管理软件自动的帮我们提交了。

  但事务不会隐式的提交,所以需要我们手动提交。

  

  我们先来看一个没加事务的例子:

  

  现在hcf向zrx转账500,hcf的balance就变了500,zrx的balance就变成了2000;

  

  因为语句中有ss,所以发生了错误,我们来看下表中数据。

  

  执行了第一个更新语句,之后遇到了错误停止执行。

  出现了钱扣了但是没有转到对方账户的情况。

  这种情况显然是不允许发生的。

  

  接下来我们为其添加事务。

  

  再次执行语句也会出现错误,我们来看下表中数据。

  

  这次虽然转账失败了,但是hcf的钱并没有被扣除。

  这次是才是我们期望的情况,希望扣钱和到账保存一致性,同时成功或者同时失败。

  

  1.3ROLLBACK

  ROLLBACK用于对事务进行回滚,

    1.3.1 rollback是针对事务的,你如果没有在执行语句之前开启事务,那么无法rollbac

    1.3.2 rollback 回滚的意思。 就是数据库里做修改后 ( update ,insert , delete)未commit 之前 使用rollback 可以恢复数据到修改之前。

  在开启事务,且没有COMMIT的前提下使数据恢复到修改之前(即回到这个事务开始前的状态)。

  一个COMMIT或ROLLBACK都代表一个事务结束,例如事务已经COMMIT了,该事务就结束了,

  则无法针对该事务使用ROOLBACK。COMMIT,ROLLBACK都是针对事务而言的。

  

  

  

  可以看到由于ROLLBACK导致回到事务执行前,所有两条语句都未执行。

  

  

  

  

  

  

  1.4保留点

  使用ROLLBACK时直接返回事务开始状态,但有时可能某些操作是有用的,  

  这时我们就可以在事务中设置保留点,回滚时可以回滚到指定的保留点。

  保留点之前的语句保存执行,保留点之后的语句不执行。

  

  

   

    第一条语句执行了,而第二条语句没有执行。

  

  

  

参考资料:

《SQL必知必会》

https://zhidao.baidu.com/question/302234245.html

https://zhidao.baidu.com/question/1754484965402002068.html

1.5 (SQL学习笔记)事务处理的更多相关文章

  1. ORALCE PL/SQL学习笔记

    ORALCE  PL/SQL学习笔记 详情见自己电脑的备份数据资料

  2. Oracle之PL/SQL学习笔记

    自己在学习Oracle是做的笔记及实验代码记录,内容挺全的,也挺详细,发篇博文分享给需要的朋友,共有1w多字的学习笔记吧.是以前做的,一直在压箱底,今天拿出来整理了一下,给大家分享,有不足之处还望大家 ...

  3. SQL学习笔记

    SQL(Structured Query Language)学习笔记 [TOC] Terminal登录数据库 1.登录mysql -u root -p ; 2.显示所有数据库show database ...

  4. [SQL学习笔记][用exists代替全称量词 ]

    学习sql的必经问题. 学生表student (id学号 Sname姓名 Sdept所在系) 课程表Course (crscode课程号 name课程名) 学生选课表transcript (studi ...

  5. SQL学习笔记——SQL初入门,Ubuntu下MySQL的安装

          刚开始接触sql,于是准备在Ubuntu下学习sql,就跟着itercast的sql教程开始入门了. 下面只是我个人的记录,高手请绕道: 一. 在安装之前,我们可以用下面这个命令通过开放端 ...

  6. pl/sql学习笔记---马士兵教程38-48

    Procedure Language/Structure query Language 一.关于语言学习 1.数据类型 2.语法   通过例子来学习很快就能明白 set serverputout on ...

  7. SQL学习笔记之SQL查询练习题1

    (网络搜集) 0x00 表名和字段 –1.学生表 Student(s_id,s_name,s_birth,s_sex) –学生编号,学生姓名, 出生年月,学生性别 –2.课程表 Course(c_id ...

  8. SQL学习笔记三(补充-1)之MySQL存储引擎

    阅读目录 一 什么是存储引擎 二 mysql支持的存储引擎 三 使用存储引擎 一 什么是存储引擎 mysql中建立的库===>文件夹 库中建立的表===>文件 现实生活中我们用来存储数据的 ...

  9. SQL学习笔记之MySQL索引知识点

    0x00 概述 之前写过一篇Mysql B+树学习,简单的介绍了B+数以及MySql使用B+树的原因, 有了这些基础知识点,对MySql索引的类型以及索引使用的一些技巧,就比较容易理解了. 0x01 ...

随机推荐

  1. ubuntu gnome桌面秀

    之前装的是ubuntu14.10gnome版的 然后一路升级成15.04,到今天的15.10 最后发现现在的gnome桌面已经非常适合我的工作了 先放一张图,这是我的桌面 原来使用ubuntu15.0 ...

  2. linux dpm机制分析(上)【转】

    转自:http://blog.csdn.net/lixiaojie1012/article/details/23707681 1      DPM介绍 1.1        Dpm:  设备电源管理, ...

  3. jquery - 实例1

    <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="text2.aspx.cs& ...

  4. WdatePicker做出onchange效果

    WdatePicker({onpicking: function (dp) {if (dp.cal.getDateStr() != dp.cal.getNewDateStr()) { Func(dp. ...

  5. scala中常用特殊符号

    参考资料: scala中常用但其他语言不常见的符号含义 Scala学习六:Scala中的特殊字符 =>(匿名函数) 参考文档:scala => 用法 匿名函数 => 匿名函数,在Sp ...

  6. LeetCode解题报告—— Permutations & Permutations II & Rotate Image

    1. Permutations Given a collection of distinct numbers, return all possible permutations. For exampl ...

  7. Edit Distance——经典的动态规划问题

    题目描述Edit DistanceGiven two words word1 and word2, find the minimum number of steps required to conve ...

  8. Eolinker——前置用例的使用

    如下补充均是Eolinker的文档中未说明的部分 1.在Eolinker的API自动化测试中,点击“前置用例”,“添加前置用例” 2.给添加的接口命名完之后,点击名称进入到编辑页面,代码输入框的内容为 ...

  9. Java8之Stream/Map

    本篇用代码示例结合JDk源码讲了Java8引入的工具接口Stream以及新Map接口提供的常用默认方法.    参考:http://winterbe.com/posts/2014/03/16/java ...

  10. Win7下安装Oracle 10g

    首先下对版本,Oracle 10g支持Win7版(32位): 10203_vista_w2k8_x86_production_db.zip 10203_vista_w2k8_x86_productio ...