零基础学SQL(十三、事务)

news2024/11/15 16:35:49

 目录

  

前置建表

​编辑

一、什么是事务

二、事务特性ACID

1、原子性(Atomicity)

2、一致性(Consistency)

3、隔离性(Isolation)

4、持久性(Durability)

三、事务控制

1、ROLLBACK

 2、COMMIT

 使用  set autocommit=0;命令修改默认提交方式为FALSE


前置建表

CREATE TABLE student (
  id int NOT NULL AUTO_INCREMENT COMMENT '主键',
  code varchar(255) NOT NULL COMMENT '学号',
  name varchar(255) DEFAULT NULL COMMENT '姓名',
  sex enum('男','女') DEFAULT NULL COMMENT '性别',
  age  int(0)  NULL COMMENT '年龄',
  PRIMARY KEY (`id`)
);

INSERT INTO `test`.`student`(`id`, `code`, `name`, `sex`, `age`) VALUES (1, '20220101', '张三', '男', 12);
INSERT INTO `test`.`student`(`id`, `code`, `name`, `sex`, `age`) VALUES (2, '202202', '李四', '男', 14);
INSERT INTO `test`.`student`(`id`, `code`, `name`, `sex`, `age`) VALUES (3, '202203', '王五', '女', 10);
INSERT INTO `test`.`student`(`id`, `code`, `name`, `sex`, `age`) VALUES (4, '202204', '张三飞', '男', 20);
INSERT INTO `test`.`student`(`id`, `code`, `name`, `sex`, `age`) VALUES (5, '202205', '小丽', '女', 10);
INSERT INTO `test`.`student`(`id`, `code`, `name`, `sex`, `age`) VALUES (6, '202206', '小明', '男', 11);

数据如下

一、什么是事务

        在MySQL的环境中,一个事务由作为一个单独单元的一个或者多个SQL语句组成。这个单元中的每个SQL语句是互相依赖的,而且单元作为一个整体是不可分割的。如果单元中的---个语句不能成功地完成,整个单元就会回滚,所有影响到的数据将返回到事务开始以前的状态。因而,只有事务中的所有语句都被成功地执行才能说这个事务被成功地执行。比如银行转账,银行的账户会扣掉对应的钱,你的账户会加上对应的钱,而这两步操作必须同时成功,不能说银行的钱扣了,你账户的钱没有增加。

二、事务特性ACID

1、原子性(Atomicity)

        原子性意味着每个事务都必须被认为是一个不可分割的单元。假设一个事务由两个或者多个任务组成,其中的语句必须同时成功才能认为事务是成功的。如果事务失败,系统将会返回到事务以前的状态。


2、一致性(Consistency)

        不管事务是完全成功完成还是中途失败,当事务使系统处于一致的状态时存在一致性。在MySQL中,一致性主要由MySQL的日志机制处理,它记录了数据库的所有变化,为事务恢复提供了跟踪记录。如果系统在事务处理中间发生错误,MySQL恢复过程将使用这些日志来发现事务是否已经完全成功地执行,是否需要返回。因而一致性属性保证了数据库从不返回一个未处理完的事务。

3、隔离性(Isolation)

        隔离性是指每个事务在它自已的空间发生,和其他发生在系统中的事务隔离,而且事务的结果只有在它完全被执行时才能看到。即使在这样的一个系统中同时发生了多个事务,隔离性原则保证某个特定事务在完全完成之前,其结果是看不见的。例如,在前面的股票交易例子中,孤立性是指两个交易者之间的事务和交易中的其他事务是不互相影响的,而且它的结果只有在被完成时才能显示给公众。

4、持久性(Durability)

        持久性是指即使系统崩溃,一个提交的事务仍在坚持。当一个事务完成,数据库的口志已经被更新时,持久性就开始发生作用。大多数RDBMS产品通过保存所有行为的日志来保证数据的持久性,这些行为是指在数据库中以任何方法更改数据。数据库日志记录了所有对于表的更新、查询、报表等。

三、事务控制

事务(transaction)指一组SQL语句;
回退(rollback)指撤销指定SQL语句的过程;
提交(commit)指将未存储的SQL语句结果写入数据库表;
保留点(savepoint)指事务处理中设置的临时占位符(place-holder),你可以对它发布回退(与回退整个事务处理不同)。

1、ROLLBACK

        MySQL的ROLLBACK命令用来回退(撤销)MySQL语句。ROLLBACK只能在一个事务处理内使用(在执行一条TRANSACTION命令之后)。事务处理用来管理INSERT、UPDATE和 DELETE语句。你不能回退SELECT语句。(这样做也没有什么意 义。)你不能回退CREATE或DROP操作。事务处理块中可以使用这两条语句,但如果你执行回退,它们不会被撤销TRANSACTION命令之后。

如以下语句,开启事务,删除sql执行之后再执行ROLLBACK,则事务回滚,删除的sql就相当于无效

SELECT * from student ; -- 结果1
START TRANSACTION;
DELETE FROM student ;
ROLLBACK;
SELECT * from student ; -- 结果2


 2、COMMIT

一般的MySQL语句都是直接针对数据库表执行和编写的。这就是所谓的隐含提交(implicit commit),即提交(写或保存)操作是自动进行的。比如我们写update语句就可以直接更新数据,写delete就可以删除数据。为了测试,我们就更改下默认提交方式来试下。

使用以下命令查看默认提交方式,value为ON则表示开启。

show variables like 'autocommit';

 

 使用  set autocommit=0;命令修改默认提交方式为FALSE

set autocommit=1;

然后进行测试,执行更新语句

update student a set a.name='张三11' where a.id=1;

然后我们查询以下,结果却如下,张三的名字改为了张三11,但是我们不是修改了默认提交方式,而且也没有使用commilt命令么??

         那是因为我们在同一个窗口查询的数据就是在一个事务里边的,目前还处于一个commit之前的状态,我们在当前事务查看当然是已经修改的了,于是重新打开一个窗口或者建立一个连接,再进行查询,结果如下:张三是未被修改掉的,如果没有执行COMMIT命令,则无法直接更新数据。 

于是加上COMMIT语句之后,再次再新窗口查询,则发现已经被修改掉。

START TRANSACTION;
update student a set a.name='张三11' where a.id=1;

COMMIT;

 

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

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

相关文章

无距离障碍:远程桌面Ubuntu实现全球办公

目录 前言 视频教程 1. ubuntu安装XRDP 2.局域网测试连接 3. Ubuntu安装cpolar内网穿透 4.cpolar公网地址测试访问 5.固定域名公网地址 [TOC] 转载自远程穿透文章:Windows通过RDP异地远程桌面Ubuntu【内网穿透】 前言 XRDP是一种开源工具,它允许…

Android开发中的前五个代码异味:Jetpack Compose UI和MVVM

Android开发中的前五个代码异味:Jetpack Compose UI和MVVM 代码异味是指软件代码中潜在问题的指标,可能并不一定是错误,但可能会导致问题,如增加维护复杂性、降低性能或降低可读性。我们将探讨Android开发中的前五个代码异味&…

【C++】布隆过滤器

文章目录 布隆过滤器提出布隆过滤器概念布隆过滤器应用场景设计思路:布隆过滤器的插入布隆过滤器的查找布隆过滤器删除BloomFilter.h布隆过滤器优点布隆过滤器缺陷 布隆过滤器提出 我们在使用新闻客户端看新闻时,它会给我们不停地推荐新的内容,它每次推荐时要去重,去掉那些已经…

Leetcode力扣秋招刷题路-0902

从0开始的秋招刷题路,记录下所刷每道题的题解,帮助自己回顾总结 902. 最大为 N 的数字组合 给定一个按 非递减顺序 排列的数字数组 digits 。你可以用任意次数 digits[i] 来写的数字。例如,如果 digits [‘1’,‘3’,‘5’],我…

一图看懂 requests 模块:用Python编写、供人类使用的HTTP库, 资料整理+笔记(大全)

本文由 大侠(AhcaoZhu)原创,转载请声明。 链接: https://blog.csdn.net/Ahcao2008 一图看懂 requests 模块:用Python编写、供人类使用的HTTP库, 资料整理笔记(大全) 摘要模块图类关系图模块全展开【requests】统计常量str 模块3 w…

小红书违禁词有哪些,小红书违禁词汇总分享

大家都知道小红书平台对于违禁词的管控一向非常严格,笔记中一旦出现就可能被限流,今天为大家整理了一份小红书违禁词汇总,希望能够帮助大家避免被限流。 小红书违禁词汇总大致有以下几个分类,大家平时写笔记的时候最好避开这些词或…

HashMap底层实现原理

HashMap HashMap 最早出现在 JDK 1.2中,底层基于散列算法实现,它是一个key-value结构的容器。 是一个key-value的映射容器,key不重复jdk8中的HashMap基于数组链表红黑树实现不保证键值的顺序可以存入null值非线程安全,多线程环境…

log4j2.xml配置解析

log4j2.xml文件的配置大致如下: Configuration:为根节点,有status和monitorInterval等多个属性 status的值有 “trace”, “debug”, “info”, “warn”, “error” and “fatal”,用于控制log4j2日志框架本身的日志级别&#x…

python+vue+nodejs旅游资源信息网站

1.系统登录:系统登录是用户访问系统的路口,设计了系统登录界面,包括用户名、密码和验证码,然后对登录进来的用户判断身份信息,判断是管理员用户还是普通用户。 2.系统用户管理:不管是…

如何选择正确的数据可视化图表

数据可视化是数据分析的重要组成部分,因为它们能够以图形格式有效地汇总大量数据。有许多可用的图表类型,每种类型都有自己的优势和用例。分析过程中最棘手的部分之一是选择使用这些可视化效果之一的正确方法来表示数据。 在本文中,我们根据需…

基于redis和threadlocal实现登录状态校验和拦截

1.流程图 单机节点下的登录状态校验 分布式节点下的登录状态校验 2.代码实现 实现步骤分为如下几步 实现WebMvcConfigurer接口,添加拦截器定义拦截器,需要配置两个interceptor,第一个用于刷新token,写threadlocal&#xff…

AI绘图实战(八):制作游戏人物原稿三视图 | Stable Diffusion成为设计师生产力工具

S:AI能取代设计师么? I :至少在设计行业,目前AI扮演的主要角色还是超级工具,要顶替?除非甲方对设计效果无所畏惧~~ 预先学习: 安装及其问题解决参考:《Windows安装Stable Diffusion …

【机器学习 - 10】:PCA和梯度上升法

文章目录 了解PCA使用梯度上升法求解第一主成分使用梯度上升法求解第二主成分求数据前n个主成分使用sklearn中封装的PCA使用真实数据集 了解PCA PCA的概念:主成分分析(Principal Component Analysis,PCA),是一种统计方法。通过正交变换将一组…

10分钟如何轻松掌握JMeter使用方法?

目录 引言 安装jmeter HTTP信息头管理器 JMeter断言 HTTP请求默认值来代替所有的域名与端口 JSON提取器来替换变量 结语 引言 想要了解网站或应用程序的性能极限,JMeter是一个不可或缺的工具。但是,对于初学者来说,该如何上手使用JMe…

【LLM】低成本部署大语言模型, 并且还能达到部署在GPU上差不多的效果

目录 前言 部署 效果 问题1:人类为什么需要睡觉? 问题2:世界上最高的山峰是什么? 前言 点进来看本文的应该都知道模型对硬件的要求很高, 那我也不废话了, 直接安排最近发现的一个开源项目, 它可以帮助我们降低部署模型的成…

按摩仪市场的AB面:暗战不止,迷雾未散

配图来自Canva可画 由于生活节奏的加快以及来自各方的压力,再加上熬夜、长时间低头玩手机等不良生活习惯,导致不少人的身体都出现了亚健康状态。不过,随着当下健康理念逐渐深入人心,人们对于健康的重视程度也持续提升。无论是刘畊…

如何挖到人生中第一个漏洞?保姆级漏洞挖掘教学

前言 有不少阅读过我文章的伙伴都知道,我从事网络安全行业已经好几年,积累了丰富的经验和技能。在这段时间里,我参与了多个实际项目的规划和实施,成功防范了各种网络攻击和漏洞利用,提高了安全防护水平。 也有很多小…

Java微服务商城高并发秒杀项目--013.SentinelResource的使用

在shop-order-server模块中新建AnnoController: RestController Slf4j public class AnnoController {RequestMapping("/anno1")SentinelResource(value "anno1",blockHandler"anno1BlockHandler",fallback "anno1Fallback&qu…

使用Stream流写出优雅的高质量代码

前言 我们在开发中会大量的用到集合,少不了对集合进行一些操作,如何优雅的遍历集合,操作集合,不仅能体现出代码的质量,更能体现出程序员本身对自我的要求。 文章目录 前言一、Stream初体验二、Stream流的使用2.1 获取…

python实现人脸识别(face_recognition)

一、定义 1、介绍 本项目是世界上最强大、简洁的人脸识别库,你可以使用Python和命令行工具提取、识别、操作人脸。 本项目的人脸识别是基于业内领先的C开源库dlib中的深度学习模型,用Labeled Faces in the Wild人脸数据集进行测试,有高达99…