MySQL-第十四篇事务管理
1、什么是事务
事务是由一步或者几步数据库操作序列组成的逻辑执行单元,这系列操作要么全部执行,要么全部放弃执行。
2、事务具备的4个特性:
1》原子性(Atomicity):事务是应用中最小的执行单位,事务是应用中不可再分的最小逻辑执行体。
2》一致性(Consistency):事务执行的结果,必须使数据库从一个一致性状态,变到另一个一致性状态。当数据库只包含事务成功提交的结果时,数据库处于一致性状态。如果系统运行发生中断,某个事务尚未完成而被迫中断,而该未完成的事务对数据库所做的修改已被写入数据库,此时数据库就处于一种不正确的状态。一致性是通过原子性来保证的。
3》隔离性(Isolation):各个事务的执行互不干扰,任意一个事务的内部操作对其他并发的事务都是隔离的。
4》持续性(Durability):持续性也称为持久性,指事务一旦提交,对数据所做的任何改变都要记录到永久存储器中,通常就是保存进物理数据库。
3、数据库的事务由下列语句组成:
1》一组DML语句,经过这组DML语句修改后的数据将保持较好的一致性。
2》一条DDL语句
3》一条DCL语句
DDL和DCL语句最多只能是一条,因为DDL和DCL语句都会导致事务立即提交。
4、当事务所包含的全部数据库操作都成功执行后,应该提交(commit)事务,使修改永久生效。事务提交的两种方式:
1》显式提交:使用commit
2》自动提交:执行DDL或DCL语句,或者程序正常退出。
5、当事务所包含的任意一个数据库操作执行失败后,应该回滚(rollback)事务,使该事务中所做的修改全部失效。事务回滚的两种方式:
1》显示回滚:使用rollback。
2》自动回滚:系统错误或者强行退出。
6、MySQL默认关闭事务(即打开自动提交)。为了开启MySQL的事务支持,可以显式调用如下命令:
SET AUTOCOMMIT = {0 | 1}//0为关闭自动提交,即开启事务
一旦在MySQL的命令行窗口中输入以上语句关闭自动提交,该命令行窗口里的所有DML语句都不会立即生效。上一个事务结束后第一条DML语句将开始一个新的事务,而后续执行的所有SQL语句都处于该事务中,除非显式使用commit来提交事务、或者正常退出、或者运行DDL、DCL语句导致事务隐式提交。当然也可以使用rollback回滚来结束事务,使用rollback结束事务将导致本次事务中的DML语句所做的修改全部失效。
(注意:一个MySQL命令行窗口代表一次连接session,在该窗口里设置set autocommit=0,相当于关闭了该连接session的自动提交,对其他连接不会有任何的影响,即其他命令行窗口不受这个设置影响。)
7、如果不想关闭整个命令行窗口的自动提交,而是想临时性地开始事务。
可以使用MySQL提供的start transaction或begin两个命令,处于start transaction或begin后的DML语句不会立即生效,除非使用commit显式提交事务,或者使用DDL、DCL语句来隐式提交事务。
8、提交,不管是显式提交还是隐式提交,都会结束当前事务;回滚,不管是显式回滚还是隐式回滚,都会结束当前事务。
9、MySQL还提供了savepoint来设置事务的中间点,通过设置事务的中间点可以让事务回滚到指定的中间点,而不是回滚全部事务。
savepoint a;
一旦设置了中间点,就可以使用rollback回滚到指定中间点。
rollback a;
10、JDBC的事务支持
1》JDBC连接也提供了事务支持,JDBC连接的事务支持由Connection提供,Connection默认打开自动提交,即关闭事务。可以调用Connection的setAutoCommit()方法来关闭自动提交,开启事务。
//关闭自动提交,开启事务
conn.setAutoCommit(false);
一旦事务开始之后,程序可以像平常一样创建Statement对象,创建了Statement对象之后,可以执行任意多条DML语句。
程序还可以调用Connection提供的getAutoCommit()方法来返回该连接的自动提交模式。
Connection的commit()方法和rollback()方法:
conn.commit();
conn.rollback();
注意:当Connection遇到一个未处理的SQLException异常时,系统将会非正常退出,事务也会自动回滚。但如果程序捕获了该异常,则需要在异常处理块中显式地回滚事务(手动回滚)。
2》Connection也提供了设置中间点的方法:
1>Savepoint setSavepoint():在当前事务中创建一个未命名的中间点,并返回代表该中间点的Savepoint对象。
2>Savepoint setSavepoint(String name):在当前事务中创建一个具有指定名称的中间点,并返回代表该中间点的Savepoint对象。
根据中间点回滚,并不关心中间点的名字,而是根据中间点对象回滚,Connection的rollback(Savepoint savepoint)方法进行回滚到指定中间点。
MySQL-第十四篇事务管理的更多相关文章
- SpringBoot第二十四篇:应用监控之Admin
作者:追梦1819 原文:https://www.cnblogs.com/yanfei1819/p/11457867.html 版权声明:本文为博主原创文章,转载请附上博文链接! 引言 前一章(S ...
- 第十四篇 Integration Services:项目转换
本篇文章是Integration Services系列的第十四篇,详细内容请参考原文. 简介在前一篇,我们查看了SSIS变量,变量配置和表达式管理动态值.在这一篇,我们使用SQL Server数据商业 ...
- 【译】第十四篇 Integration Services:项目转换
本篇文章是Integration Services系列的第十四篇,详细内容请参考原文. 简介在前一篇,我们查看了SSIS变量,变量配置和表达式管理动态值.在这一篇,我们使用SQL Server数据商业 ...
- 跟我学SpringCloud | 第十四篇:Spring Cloud Gateway高级应用
SpringCloud系列教程 | 第十四篇:Spring Cloud Gateway高级应用 Springboot: 2.1.6.RELEASE SpringCloud: Greenwich.SR1 ...
- Spring Cloud第十四篇 | Api网关Zuul
本文是Spring Cloud专栏的第十四篇文章,了解前十三篇文章内容有助于更好的理解本文: Spring Cloud第一篇 | Spring Cloud前言及其常用组件介绍概览 Spring C ...
- 解剖SQLSERVER 第十四篇 Vardecimals 存储格式揭秘(译)
解剖SQLSERVER 第十四篇 Vardecimals 存储格式揭秘(译) http://improve.dk/how-are-vardecimals-stored/ 在这篇文章,我将深入研究 ...
- Python之路【第十四篇】:AngularJS --暂无内容-待更新
Python之路[第十四篇]:AngularJS --暂无内容-待更新
- Egret入门学习日记 --- 第十四篇(书中 5.4~5.6节 内容)
第十四篇(书中 5.4~5.6节 内容) 书中内容: 总结 5.4节 内容重点: 1.如何编写自定义组件? 跟着做: 重点1:如何编写自定义组件? 文中提到了重要的两点. 好,我们来试试看. 第一步, ...
- 闯祸了,生成环境执行了DDL操作《死磕MySQL系列 十四》
由于业务随着时间不停的改变,起初的表结构设计已经满足不了如今的需求,这时你是不是想那就加字段呗!加字段也是个艺术活,接下来由本文的主人咔咔给你吹. 试想一下这个场景 事务A在执行一个非常大的查询 事务 ...
随机推荐
- Composer\Downloader\TransportException ... Failed to enable crypto,failed to open stream: operation failed
failed to open stream: operation failed 错误详细信息: [Composer\Downloader\TransportException] The "h ...
- GUI学习之二十——QAbstractSlider学习总结
今天学习一种全新的输入控件——QAbstractSlider()滑块控件的基础控件. 一.描述: QAbstractSlider()是QWidget()的子类,提供了一个范围内的整数值.它是QSlid ...
- Laravel——缓存使用
1.使用Redis类 use Illuminate\Support\Facades\Redis; 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 ...
- Python(1) 整型与浮动型
整型与浮动型 整数/浮动数=浮点型整数/整数 = 浮点型 例如:>>> type(1/1)<class 'float'>>>> type(1/1.0)& ...
- 【JavaScript】 模拟JQuery的连续调用函数
连续调用,了解调用主体 var zhangsan = { smoke: function () { console.log("Smoking..."); return this; ...
- c++复习——类(2)
1.this指针 this指针是一个指向对象的指针. this指针是一个隐含于成员函数中的对象指针. this指针是一个指向正在调用成员函数的对象的指针. 类的静态成员函数没有this指针 ...
- Android 快速索引(城市列表和联系人)
最近需要实现一个城市列表的快速索引功能.类似于联系人应用,根据姓名首字母快速索引功能. 要实现这个功能只需要解决两个问题:1.对列表进行分组(具有同一特征),并且能够快速定位到该组的第一项 2.右侧分 ...
- D - Cheerleaders(第三周)
D - Cheerleaders 题目链接:https://vjudge.net/contest/154063#problem/D 题目大意: 给你一个 n∗m 的方格,现在有 k 个相同石子,我们要 ...
- UIWebView 禁止检测链接弹出UIActionSheet
解决方法一: 添加以下代码禁止检测类型 webView.dataDetectorTypes = UIDataDetectorTypeNone; 解决方法二: - (void)webViewDidFin ...
- Linux函数的使用方法
[root@a ~]#cat fun.txt #定义函数库文件,方便在别的地方使用 addnum1() { echo $[$1+$2] } addnum2(){ echo $[$1*$2] } del ...