1.5 (SQL学习笔记)事务处理
一、事务
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学习笔记)事务处理的更多相关文章
- ORALCE PL/SQL学习笔记
ORALCE PL/SQL学习笔记 详情见自己电脑的备份数据资料
- Oracle之PL/SQL学习笔记
自己在学习Oracle是做的笔记及实验代码记录,内容挺全的,也挺详细,发篇博文分享给需要的朋友,共有1w多字的学习笔记吧.是以前做的,一直在压箱底,今天拿出来整理了一下,给大家分享,有不足之处还望大家 ...
- SQL学习笔记
SQL(Structured Query Language)学习笔记 [TOC] Terminal登录数据库 1.登录mysql -u root -p ; 2.显示所有数据库show database ...
- [SQL学习笔记][用exists代替全称量词 ]
学习sql的必经问题. 学生表student (id学号 Sname姓名 Sdept所在系) 课程表Course (crscode课程号 name课程名) 学生选课表transcript (studi ...
- SQL学习笔记——SQL初入门,Ubuntu下MySQL的安装
刚开始接触sql,于是准备在Ubuntu下学习sql,就跟着itercast的sql教程开始入门了. 下面只是我个人的记录,高手请绕道: 一. 在安装之前,我们可以用下面这个命令通过开放端 ...
- pl/sql学习笔记---马士兵教程38-48
Procedure Language/Structure query Language 一.关于语言学习 1.数据类型 2.语法 通过例子来学习很快就能明白 set serverputout on ...
- SQL学习笔记之SQL查询练习题1
(网络搜集) 0x00 表名和字段 –1.学生表 Student(s_id,s_name,s_birth,s_sex) –学生编号,学生姓名, 出生年月,学生性别 –2.课程表 Course(c_id ...
- SQL学习笔记三(补充-1)之MySQL存储引擎
阅读目录 一 什么是存储引擎 二 mysql支持的存储引擎 三 使用存储引擎 一 什么是存储引擎 mysql中建立的库===>文件夹 库中建立的表===>文件 现实生活中我们用来存储数据的 ...
- SQL学习笔记之MySQL索引知识点
0x00 概述 之前写过一篇Mysql B+树学习,简单的介绍了B+数以及MySql使用B+树的原因, 有了这些基础知识点,对MySql索引的类型以及索引使用的一些技巧,就比较容易理解了. 0x01 ...
随机推荐
- Python3 高阶函数
高阶函数 (满足其一就是:(1)一个函数名作为另一个函数的形参:(2)返回值包含函数名;不修改函数的调用方式) 1.一个函数名作为另一个函数的形参 输出结果: 2.返回值包含函数名;不修改函数的 输出 ...
- 安全测试===appscan扫描工具介绍
IBM AppScan该产品是一个领先的 Web 应用安全测试工具,曾以 Watchfire AppScan 的名称享誉业界.Rational AppScan 可自动化 Web 应用的安全漏洞评估工作 ...
- linux dpm机制分析(下)【转】
转自:http://blog.csdn.net/lixiaojie1012/article/details/23707901 1 设备注册到dpm_list路径 (Platform_devi ...
- 独立服务器远程重装Linux系统
独立服务器远程重装Linux系统 http://rashost.com/blog/remote-reinstall-linux-dedicated-server 本文介绍怎样在没有console连接, ...
- Keepalived 安装与简单配置
Keepalived 安装与简单配置 http://sivxy.lofter.com/post/1d21ebb9_7e15000
- C#面向对象(OOP)入门—第二天—多态和继承(继承)
介绍: 第一天的内容主要是不同情形下的方法重载.这一部分则主要讲面向对象中继承的概念.首先用一个要点图形来定义继承. 继承 一个简单的例子: ClassA: class ClassA:ClassB { ...
- Codeforces 873B - Balanced Substring(思维)
题目链接:http://codeforces.com/problemset/problem/873/B 题目大意:一个字符串全部由‘0’和‘1’组成,当一段区间[l,r]内的‘0’和‘1’个数相等,则 ...
- POJ-2594
Treasure Exploration Time Limit: 6000MS Memory Limit: 65536K Total Submissions: 7035 Accepted: 2 ...
- window,getComputedStyle,letter-spacing
js 拿到element的css样式 window.getComputedStyle(ele,[pseuso) 比如想拿到一个element的背景色 window.getComput ...
- 机器学习方法(七):Kmeans聚类K值如何选,以及数据重抽样方法Bootstrapping
欢迎转载,转载请注明:本文出自Bin的专栏blog.csdn.net/xbinworld. 技术交流QQ群:433250724,欢迎对算法.技术感兴趣的同学加入.我的博客写一些自己用得到东西,并分享给 ...