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

本篇讲述数据库中非常重要的事务概念和如何使用MySQL命令行窗口来进行数据库的事务操作。下一篇会讲述如何使用JDBC进行数据库的事务操作。

事务是指数据库中的一组逻辑操作,这个操作的特点就是在该组逻辑中,所有的操作要么全部成功,要么全部失败。在各个数据具有特别紧密的联系时,最好是使用数据库的事务来完成逻辑处理。

例如路人甲A给路人甲B转账1000元,对应于如下两条SQL命令:

update from account set money=money-1000 where name=’A’;

update from account set money=money+1000 where name=’B’;

在上面两条SQL语句中,任意一条SQL执行过程中出现了错误,那么就有可能造成A与B两人最后总金额的错误。但如果是使用事务来处理,即使上面的转账过程出现了错误,那么之前执行的数据库操作即使成功也会一并回滚,形成所有的SQL操作全部失败,保证所有人的金额不变。

MySQL数据库默认事务是自动提交的,也就是发一条SQL数据库就执行一条。如果想将多条SQL放置在一个事务中执行,就必须使用如下语句:

start transaction

sql1

sql2

commit

当开启事务后(start transaction),无论数据库是否对其中的多条SQL语句是否执行成功,只要没有提交事务(commit),都会将之前执行的SQL进行回滚。使数据回到开启事务之前的值。

在MySQL中,与事务相关的有开启事务(START TRANSACTION),提交事务(COMMIT),回滚事务(ROLLBACK)等等,下面将依次使用到。

接下来将会在先使用数据库命令行窗口来进行事务操作的案例。

首先定义表account和客户以及金额两个列数据项:

48304ba5e6f9fe08f3fa1abda7d326ab.png

create database jdbcdemo;

use jdbcdemo;

create table account(

id int primary key auto_increment,

name varchar(40),

money double

);

insert into account(name,money) values('a',1000);

insert into account(name,money) values('b',1000);

48304ba5e6f9fe08f3fa1abda7d326ab.png

准备完成:

5f9f32c073e7f278a50a2901e54508f9.png

⑴ 开启事务,先来模拟转账“失败”的情况:

输入以下SQL语句,来模拟A向B转账1000元:

start transaction;

update account set money=money-1000 where name=’a’;

假设数据库执行到此发生了错误,我们将MySQL的命令行窗口关闭来代替这样的“错误”:

efbbd9fbc8ff3969075c24f934f4cd5e.png

这时如果我们再重新打开MySQL命令行窗口,重新查看用户的金额,发现由于我们开启事务后,并未提交(commit),因此导致事务回滚,之前执行的SQL语句全部不算成功,因此即使数据库可能发生了错误,用户金额还是能由事务保证不出意外:

a72741eb9e5961bc966ebf0d27116c05.png

⑵ 开启事务,并提交事务模拟成功的转账:

还是上面的例子,这次我们在开启事务,输入SQL命令,最后提交事务(Commit),来确保这个事务内所有的SQL命令都能被执行成功,输入以下SQL语句:

start transaction;

update account set money=money-1000 where name=’a’;

update account set money=money+1000 where name=’b’;

commit;

即为下面的样子:

3e5c3ca2635138c208eb10ac929019ec.png

这时候即使我将MySQL命令行窗口关闭模拟提交事务后再出错的情况,那么重新查询用户金额还是能看出转账已经在出错前确保完成了:

724a5960fc5485e842d4e2825d47774b.png

通过上面两个例子可以看出,如果我们想将多条SQL作为整体执行,只要有一个条SQL执行失败或者数据库突然出错就回滚到最开始执行之前的状态,使用事务是最好的选择。

⑶ 回滚事务,将之前所有已执行的SQL全部视为无效:

最后来看看事务回滚(ROLLBACK)。如果我们在事务处理的过程中,提交事务(Commit)之前,如果想回滚之前的操作,可以使用ROLLBACK这条SQL命令。

注:使用ROLLBACK命令将回滚之前到开启事务的所有SQL语句。

还是以上面的A与B两个用户的金额为例,现在两者的金额都为1000:

7a6e43b9daeb8adfe40c09b301ef3524.png

现在我们开启事务,执行几条SQL命令,然后再将这些已经执行的SQL命令回滚:

67c198678956000ac937b1171da0cb92.png

使用ROLLBACK命令会回滚该事务内所有之前执行的SQL命令,不会只回滚前面一条SQL命令,因此即使我们对A和B的金额操作了多次,最终还是回到事务开启前的金额数:

8b7ea30a489cbccebad3651a25bee975.png

以上介绍完在数据库命令行窗口如何进行与事务相关的操作,主要就是开启事务,提交事务和回滚事务这三种,当然作为Java程序员,我们应该还是使用JDBC来操作数据库的事务处理,这部分内容将会在下一篇博客中介绍到。

MyNote: 学习数据库可以结合JDBC一起来操作。调用JAVA的API来实现数据库操作。

转自:https://www.cnblogs.com/fjdingsd/p/5272952.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/574401.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

iOS 高效 Mac 配置

https://testerhome.com/topics/3045 https://support.apple.com/zh-cn/HT201236转载于:https://www.cnblogs.com/mobilefeng/p/4701469.html

壁式框架内力计算_剪力墙结构设计计算要点和实例

剪力墙计算第5章剪力墙结构设计本章主要内容:5.1概述结构布置剪力墙的分类剪力墙的分析方法5.2整体剪力墙和整体小开口剪力墙的计算整体剪力墙的计算整体小开口剪力墙的计算5.3联肢剪力墙的计算双肢剪力墙的计算多肢墙的计算5.4壁式框架的计算计算简图内力计算位移的…

Linux删除文件夹命令

Linux删除文件夹命令 linux删除目录很简单,很多人还是习惯用rmdir,不过一旦目录非空,就陷入深深的苦恼之中,现在使用rm -rf命令即可。直接rm就可以了,不过要加两个参数-rf 即:rm -rf 目录名字 删除目录、文…

concat合并的数组会有顺序么_javascript concat 数组与数组或数组与字符串的合并

concat 方法将传入的数组或非数组值与原数组合并,组成一个新的数组并返回.concat()基本语法:array.concat(value1, value2, ..., valueN)concat()参数说明:参数名参数说明array原数组value1, value2, ..., valueN需要与原数组合并的数组或非数组值.conca…

C#调用mciSendString播放音频文件

mciSendString函数是一个WinAPI,主要用来向MCI(Media Control Interface)设备发送字符串命令。 一、函数的声明如下: private static extern long mciSendString(string command, //MCI命令字符串string returnString, //存放…

mysql 存json中文乱码怎么设置_json接口插入数据库中文乱码

现象:1. 数据库中文乱码控制台显示中文乱码加载的日志2016-08-28 16:00:42,894 org.nutz.dao.impl.DaoSupport$1.invoke(DaoSupport.java:174) DEBUG - JDBC URL --> jdbc:mysql://139.129.118.219:13306/CloudServer2016-08-28 16:00:42,989 org.nutz.dao.impl.…

[转]进程间通信 - ipcrm

ipcrm 命令删除一个或更多的消息队列、信号量集或者共享内存标识。 简介 ipcrm [ -M key | -m id | -Q key | -q id | -S key | -s id ] ... 错误的用法 ipcrm {shm|msg|sem} id... 1.使用说明 ipcrm -M shmkey 移除用shmkey创建的共享内存段 ipcrm -m shmid 移除用shmid标…

python批量修改文件名为excel中指定名称_在Python脚本的帮助下,使用excelsh中的名称映射重命名文件夹中的文件名...

在一个文件夹中有许多CSV文件我想重命名。有一个excel工作表,其中包含要重命名为文件夹的文件名。在文件夹中的文件名为测试数据?30四月.csv在测试数据?20四月.csv在测试数据18四月.csv等等而excel工作表包含的名称为0.25-测试数据4月30日0.9…

sequelize连接mysql_Sequelize没有连接mysql

文件config / config.json{"development": {"username": "root","password": null,"database": "example","host": "example.sqlite","dialect": "sqlite"},"stage…

java开发微信公众平台备忘

简单记录下前段时间开发的电子书的 公众平台的一些备忘及开发心得经验等 eclipse的一些技巧: 1.ctrlshifto 自动添加必要import空间及移除无用import 项目备忘说明 1.struts配置 :resources->struts.xml 经验心得: 1.struts在前台显示后台属性:${属性名称}&#…

java初级程序员_为什么现在JAVA初级程序员要求这么高?

为什么现在JAVA初级程序员要求这么高?举个例子,在90年代,我们吃的是什么?有像现在每天没肉吃就吃不下饭的时候吗?那在90年代我们的编程技术又是什么样的?是不是垃圾的再垃圾不过了?那时候是不是…

html5晋级之路-css背景

css背景: css允许应用纯色作为背景,也允许使用图片来创建相当复杂的效果。 background-attachment 背景图像书否固定或随页面的其余部分滚动 background-color 设置元素的背景颜色 background-image 把…

java word在线预览_java 生成word文档并且在线预览的问题

富文本?用iText或者PD4ML直接转换为pdf[code"java"]String outputFile "D:/Test/demo_3.pdf";OutputStream os new FileOutputStream(outputFile);ITextRenderer renderer new ITextRenderer();ITextFontResolver fontResolver renderer.ge…

java中引用

谈论Java肯定离不开其中的垃圾回收机制,无论是通过引用计数算法判断对象的引用数量,还是通过根搜索算法判断对象的引用链是否可达,判断对象是否存活都与“引用”有关。 在JDK1.2之前,Java中引用的定义很传统:如果refer…

SQL SERVER 2014 各个版本支持的功能

转自:https://technet.microsoft.com/library/cc645993 转换箱规模限制 功能名称EnterpriseBusiness IntelligenceStandardWebExpress with Advanced ServicesExpress with ToolsExpress单个实例使用的最大计算能力(SQL Server 数据库引擎)1操…

关于src和background

今天想修改imageview的src里的图片时,发现居然没有setSrcResource方法,但是setBackGroundResource肯定不行啊。 后来找了好几遍,其实与src对应的就是 setImageResource方法。以后别忘记了哦。转载于:https://www.cnblogs.com/heartstong/p/47…

java 线程只执行一次_java – 如何确保方法只执行一次并且只从一个线程执行?...

ShayHaned的解决方案使用锁定.您可以通过AtomicBoolean使其更高效,如:AtomicBoolean wasRun new AtomicBoolean(false);CountDownLatch initCompleteLatch new CountDownLatch(1);public void initialize() {if (!wasRun.getAndSet(true)) {List metadata getMet…

Android无法生成R文件的终极解决办法

R文件如果在clean项目(Project—>Clean)和 Fix Project Properties(如下图): 如果在第一步无法解决的的时候,那可能原因就是资源文件调用的错误,比如资源文件命名不规范,多余的资…

java link_Java Link类代码示例

import org.nodes.Link; //导入依赖的package包/类public static double sizeBetaCopying(DGraph graph, DGraph sub,List> occurrences, boolean resetWiring, int iterations, double alpha){int numThreads Runtime.getRuntime().availableProcessors();List> wiring…

go read text file into string array

http://stackoverflow.com/questions/5884154/golang-read-text-file-into-string-array-and-write 方法一 1 package main2 3 import (4 "bufio"5 "fmt"6 "log"7 "os"8 )9 10 // readLines reads a whole file into memory …