深圳网站建设价钱/市场营销计划书模板

深圳网站建设价钱,市场营销计划书模板,工业设计完整作品集,外贸平台排行榜一、事务是什么东西 有些场景中,某个操作需要多个sql配合完成: 例如: 李四这个月剩下的前不够交房租了,找张三借1000元急用: (1)给张三的账户余额 减去1000元 updata 账户表 set money money -…

一、事务是什么东西

有些场景中,某个操作需要多个sql配合完成:

例如:

李四这个月剩下的前不够交房租了,找张三借1000元急用:

(1)给张三的账户余额 减去1000元

updata 账户表 set money = money - 1000 where id = 2;

(2)给李四的账户余额 加1000元

updata 账户表 set money = money + 1000 where id = 1; 

试想一下:

如果执行完第一条语句,执行第二条语句之前,出现了严重的问题了(程序破溃,服务器断电了),那不就完了吗,这谁还敢把钱存你这里

所以就引入事务:

所谓事务,就相当于把要执行的多个SQL语句打包成一个整体,这个“整体”在执行过程中就能够做到要么整个都指向完,要么一个都不执行,就可以做到避免上述例子的情况。

但是此处的“一个都不执行”不是SQL语句真的不执行,而是执行到一般如果出错了,数据库会自动进行“还原操作”,相当于把之前的SQL语句进行“撤销”,最终的效果看起来就像是一个都没有执行这样的效果。

我们把这样的机制称为“回滚(rollback)”,同时也把上述的特性称为“原子性”。

之前人们以为“原子”就是不可拆分的最小单位了,我们计算机这边就引入这样的名字

二、数据库怎么知道如何回滚?

不知道大家有没有跟我一样好奇,服务器都断电了,数据库咋知道如何进行“回滚”呢?数据库咋知道之前做出了什么样的修改?

数据库内部存在一系列的“日志体系”,记录到“文件中”,因为是保存到外存上的,既可以应对“程序崩溃”、就连“服务器掉电”也是可以做到回滚的。虽然掉电了,但是回滚日志还是存在的,下次数据库启动的时候就可以根据回滚日志的内容,进行回滚操作了。

那么drop database这样的操作能回滚回来吗?

答案是不能的,因为这样的操作不能放到事务中去执行,并且这也不算是执行出错,算是“正确执行的SQL语句”

三、语法

  1. 开启事务:start transaction;
  2. 执行多条SQL语句;
  3. 回滚或提交:rollback/commit;

注意:rollback代表SQL语句操作操作全部失败,commit即是全部成功。

当我们有这样一张账户表:

李四这个月买了新手机,但是发现房租还没有交,只好找好哥们张三借1000元急用。

结果:

如果是rollback结尾:

结果:

并没有任何变化

开启事务后执行:

开启事务后不执行:

四、事务的四个特性

1.原子性

原子性就是刚刚一直将的内容

2.一致性

描述的是,事务执行前和执行后,数据库中的数据,都是“合法状态”,不会出现非法临时结果的状态。

3. 持久性

事务执行完之后,就会更改硬盘上相应的数据,事务都是会永久生效的

4.隔离性

描述了多个事务并发执行的时候,相互之间产生的影响是怎样的。

并发执行是指:

Mysql是一个“客户端 - 服务器”结构的程序

一个服务器通常都是,给多个客户端提供服务的

那么多个客户端,就同时给这个服务器提交事务来执行,与之相对的,服务器就需要同时执行多个事务,此时就是“并发”执行

 并且这些事务可能会对同一张表进行增删改查,此时就可能会有一些问题:

4.1 脏读

 现在有两个事务:

事务A 和 事务B

其中事务A在针对某个表的数据进行修改

A执行过程中,B去读取这个表的数据

当B读完之后,A把表里的数据又改成别的;

这就会导致,B读到的数据,就不是合法的数据,而是读到了临时性的“脏数据”

 那么我们就约定,在改数据的时候,不能读,也称为“给写操作加锁”

4.2  不可重复读

有三个事务: A  B  C

事务A执行一个修改操作。A执行完毕,提交数据;

接下来事务B执行,事务B读取刚才提交完的数据;

在B读取的过程中,又来了一个事务C,C又对刚才A的数据进行修改;

此时对于事务B来说,后续再读取这个数据,读取的结果就和第一次读到的结果是不一样的。这个过程就叫做“不可重复读”

但是需要注意,是对于事务B来说,多次读取的结果不一样。

但是又来了个事务D读取C改变后的数据,那这个是没有问题的

 那么我们就约定:

一个事务在读取数据的过程中,其他的事务不能修改它正在读的数据,给读加锁

4.3  幻读

相当于不可重复读的“特殊情况”:

现在已经预定好了,改数据的时候不能读,读数据的时候不能改

现在有两个事务: A  B

有一个事务A在读取数据,读的过程中,另外一个事务B,新增了/删除了一些其他数据

此时站在A的视角,多次读取的数据内容虽然一样,但是“结果集“不同,结果集不同,是否算是问题,视情况而定

如何解决?

还是继续约定,只要有事务读取,我就不做任何操作,这样的操作称为“串行化”,什么意思?

如多个客户端,同时提交了多个事务过来,但是服务器一个一个的执行事务(执行完第一个再执行第二个……)

 

五、隔离级别

在Mysql中提供了四个隔离级别。可以通过配置文件设置当前服务器的隔离级别是哪个级别。

设置不同的隔离级别,就会让事务之间的并发执行产生不同的差别,从而会影响到上述的三个问题的情况

1.read uncommitted 

此情况下,一个事务可以读取另一个事务未提交的数据。

此时,就可能会 产生脏读、不可重复读、幻读 三种问题

但是此时,多个事务并发执行程度是最高的,执行速度也是最快的

2.read committed 

这种情况下,一个事务只能读取另一个事务提交之后的数据(给写加锁了),此时,可能会产生 不可重复读,幻读问题 (脏读问题解决了),此时,并发程度会降低,执行速度会变慢但是,事务之间的隔离性提高了

3.repeatable read

这个情况下,相当于是给 写操作 和 读操作 都加锁了.

此时,可能产生幻读问题,解决了脏读和不可重复读问题.

并发程度进一步降低,执行速度进一步变慢,事务之间的隔离性进一步变高了

4.serializable

此时,所以的事务都是在服务器上一个个执行的。

此时,解决了脏读、不可重复的、幻读问题

并发程度最低,执行速度最慢,隔离性最高,数据库最准确

 

那么就根据具体场景选择隔离级别, 对于钱等数据重要的场合就选择serializable,对速度要求高的,就根据需求选择更快的

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

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

相关文章

Windows对比MacOS

Windows对比MacOS 文章目录 Windows对比MacOS1-环境变量1-Windows添加环境变量示例步骤 1:打开环境变量设置窗口步骤 2:添加系统环境变量 2-Mac 系统添加环境变量示例步骤 1:打开终端步骤 2:编辑环境变量配置文件步骤 3&#xff1…

蓝桥杯 之 填空题-位运算与循环

文章目录 循环握手问题门牌制作-循环小球反弹幸运数艺术与篮球跑步 位运算3个1美丽的2024 位运算 可以关注这个Lowbit(x) 如何判断最低位是否是1? num&1 1就说明num最低位是1 循环 循环 握手问题 握手问题 思路分析: 可以直接计算出来&#xff…

OAK相机的抗震性测试

在工业环境中,双目视觉相机必须具备与工作环境同等的坚固性。鉴于部分客户会将我们的相机应用于恶劣环境(例如安装在重型机械上),我们依据EN 60068-2-6:2008标准对相机进行了振动耐受性测试。 测试涉及的相机型号包括&#xff1a…

Express MVC

1. 安装依赖 npm init -y npm install express npm install --save-dev typescript ts-node ejs types/node types/express tsc --init 2. 项目目录结构如下,没有的手动创建 /my-app/src/modelsuser.ts/viewsindex.ejsuserList.ejs/controllersuserController.ts…

apache-maven-3.2.1

MAVEN_HOME D:\apache-maven-3.2.1 PATH D:\apache-maven-3.2.1\bin cmd mvn -v <localRepository>d:\localRepository</localRepository> setting.xml <?xml version"1.0" encoding"UTF-8"?><!-- Licensed to the Apache Soft…

【java】@Transactional导致@DS注解切换数据源失效

最近业务中出现了多商户多租户的逻辑&#xff0c;所以需要分库&#xff0c;项目框架使用了mybatisplus所以我们自然而然的选择了同是baomidou开发的dynamic.datasource来实现多数据源的切换。在使用初期程序运行都很好&#xff0c;但之后发现在调用com.baomidou.mybatisplus.ex…

浅入浅出Selenium DevTools

前言 在自动化测试领域&#xff0c;Selenium一直是主流工具之一。随着前端技术的不断发展&#xff0c;浏览器的功能也在不断丰富。 Selenium 3版本前&#xff0c;一套通用的采集流程如上图所示&#xff1a; 打开Charles&#xff0c;设置Session自动导出频次及导出路径Seleniu…

【子网掩码计算器:Python + Tkinter 实现】

子网掩码计算器&#xff1a;Python Tkinter 实现 引言代码功能概述代码实现思路1. 界面设计2. 功能实现3. 事件处理 子网掩码计算器实现步骤1. 导入必要的库2. 定义主窗口类 SubnetCalculatorApp3. 创建菜单栏4. 创建界面组件5. 判断 IP 地址类别6. 计算子网信息7. 其他功能函…

3dsmax中使用python创建PBR材质并挂接贴图

前言 笔者处理模型时下载到一个pbr材质库贴图包&#xff0c;手动每次创建材质过于麻烦&#xff0c;因此计划使用自动化脚本根据贴图名自动创建材质。 3dsmax的原本脚本使用的是maxscript&#xff0c;语法有点奇怪懒得学&#xff0c;发现也支持使用python编写脚本&#…

Metal学习笔记九:光照基础

光和阴影是使场景流行的重要要求。通过一些着色器艺术&#xff0c;您可以突出重要的对象、描述天气和一天中的时间并设置场景的气氛。即使您的场景由卡通对象组成&#xff0c;如果您没有正确地照亮它们&#xff0c;场景也会变得平淡无奇。 最简单的光照方法之一是 Phong 反射模…

start DL from stratch (2)!!!

start DL from stratch &#xff08;2&#xff09;!!! 一、CPU and GPUcpuGPU安培架构爱达洛夫莱斯架构 二、使用conda创建一个新的虚拟环境三、autodl操作先知Linux复习目录文件和数据上传对于整个镜像的操作守护进程Tips 四、autodl租用创建实例<big>没有所需要的版本的…

机器学习:线性回归,梯度下降

线性回归模型 (Linear Regression Model) 梯度下降算法 (Gradient Descent Algorithm) 的数学公式

论文笔记-NeurIPS2017-DropoutNet

论文笔记-NeurIPS2017-DropoutNet: Addressing Cold Start in Recommender Systems DropoutNet&#xff1a;解决推荐系统中的冷启动问题摘要1.引言2.前言3.方法3.1模型架构3.2冷启动训练3.3推荐 4.实验4.1实验设置4.2在CiteULike上的实验结果4.2.1 Dropout率的影响4.2.2 实验结…

从UNIX到Linux:操作系统进化史与开源革命

从UNIX到Linux&#xff1a;操作系统进化史与开源革命 一、操作系统&#xff1a;数字世界的基石 1.1 什么是操作系统&#xff1f; 操作系统&#xff08;OS&#xff09;是计算机系统的核心管理者&#xff0c;承担着三大核心使命&#xff1a; 硬件指挥官&#xff1a;直接管理C…

如何修改安全帽/反光衣检测AI边缘计算智能分析网关V4的IP地址?

TSINGSEE青犀推出的智能分析网关V4&#xff0c;是一款集成了BM1684芯片的高性能AI边缘计算智能硬件。其内置的高性能8核ARM A53处理器&#xff0c;主频可高达2.3GHz&#xff0c;INT8峰值算力更是达到了惊人的17.6Tops。此外&#xff0c;该硬件还预装了近40种AI算法模型&#xf…

【全栈开发】----Mysql基本配置与使用

本篇是在已下载Mysql的情况下进行的&#xff0c;若还未下载或未创建Mysql服务&#xff0c;请转到这篇: 2024 年 MySQL 8.0.40 安装配置、Workbench汉化教程最简易&#xff08;保姆级&#xff09;_mysql8.0.40下载安装教程-CSDN博客 本文对于mysql的操作均使用控制台sql原生代码…

C++ primer plus 第四节 复合类型

本章内容包括: • 创建和使用数组 • 创建和使用 c-风格字符串 • 创建和使用 string 类字符串 • 使用方法getline( )和 get( )读取字符串 • 混合输入字符串和数字 • 创建和使用结构 • 创建和使用共用休 • 创建和使用枚举 • 创建和使用指针 • 使用 new和delete 管理动态…

FFmpeg入门:最简单的音频播放器

FFmpeg入门&#xff1a;最简单的音频播放器 欢迎大家来到FFmpeg入门的第二章&#xff0c;今天只做一个最简单的FFmpeg音频播放器&#xff1b;同样&#xff0c;话不多说&#xff0c;先上流程图 流程图 以上流程和视频播放器的解码过程基本上是一致的&#xff1b; 不同点在于 S…

《每天读一个JDK源码》之HashMap解读

&#x1f4cc;《每天读一个JDK源码》之HashMap解读 &#x1f517;源码定位&#xff1a;java.util.HashMap&#xff08;建议IDE对照阅读&#xff09; 今天我们来破解Java集合框架中最精妙的艺术品——HashMap&#xff01;它不仅是面试必考题&#xff08;出现率99%&#xff09;&…

【Java项目】基于SpringBoot的Java学习平台

【Java项目】基于SpringBoot的Java学习平台 技术简介&#xff1a;采用Java技术、SpringBoot框架、MySQL数据库等实现。系统基于B/S架构&#xff0c;前端通过浏览器与后端数据库进行信息交互&#xff0c;后端使用SpringBoot框架和MySQL数据库进行数据处理和存储&#xff0c;实现…