MYSQL进阶-事务的基础知识

1.什么是数据库事务?

就是把好几个sql语句打包成一个整体执行,要么全部成功,要么全部失败!!!

事务是一个不可分割的数据库操作序列,也是数据库并发控制的基本单位,其执
行的结果必须使数据库从一种一致性状态变到另一种一致性状态。事务是逻辑上
的一组操作,要么都执行,要么都不执行。
事务最经典也经常被拿出来说例子就是转账了。
假如小明要给小红转账1000元,这个转账会涉及到两个关键操作就是:将小明
的余额减少1000元,将小红的余额增加1000元。万一在这两个操作之间突然出
现错误比如银行系统崩溃,导致小明余额减少而小红的余额没有增加,这样就不
对了。事务就是保证这两个关键操作要么都成功,要么都要失败。

2.事务的特性

事物的四大特性(ACID)?
关系性数据库需要遵循ACID规则,具体内容如下:
在这里插入图片描述

  1. 原子性(atomicity): 事务是最小的执行单位,不允许分割。事务的原子性确保动作
    要么全部完成,要么完全不起作用;
  2. 一致性(consistence): 执行事务前后,数据保持一致,多个事务对同一个数据读取的
    结果是相同的;
  3. 隔离性(isolation): 并发访问数据库时,一个用户的事务不被其他事务所干扰,各
    并发事务之间数据库是独立的;
  4. 持久性(durable): 一个事务被提交之后。它对数据库中数据的改变是持久的,即
    使数据库发生故障也不应该对其有任何影响。

3.事务的状态

  1. 活动的
  2. 部分提交的
  3. 失败的
  4. 中止的
  5. 提交的

在这里插入图片描述

4. 如何使用事务

SQL语句的执行原理?
InnoDB 存储引擎先以页为单位将数据从磁盘的页上加载到内存的Buffer Pool中,再对进行数据进行增删改查处理,处理完之后commit,就会将数据从内存刷新到磁盘中进行持久化
如果在内存处理数据时出现异常,就会回滚rollback,不将数据从内存中刷新到磁盘中。

begin: 开启一个事务,开启之后不会默认提交【除隐式事务外】,需要手动提交,否则不会刷新到磁盘。
commit: 结束当前事务,刷新到磁盘进行持久化。当前begin没有commit又开启一个begin会自动commit。
rollback: 回滚,将内存中的数据恢复到上一次commit之后。

使用begin开启一个事务,commit结束事务,未commit之前都是在内存中运行,commit之后就会刷新到磁盘进行持久化。未commit之前可以使用rollback回滚,就不会刷新到磁盘。如果已经commit刷新到磁盘则无法回滚。回滚是回滚到上一次commit。
mysql事务会默认提交,一个SQL语句就是一个单独的事务,自己可以设置默认不提交,自己控制事务。

BEGINUPDATE book1 SET num = 1000 WHERE id = 1;COMMIT

这里是引用

查看自动提交变量

SHOW variables like 'autocommit';

设置系统不自动提交

SET autocommit = false;

对DML语言有效,对DDL无效,DDL会自动提交

4.1 显式事务

自己手动BEGIN,COMMIT。开启事务不自动提交

BEGINUPDATE book1 SET num = 1000 WHERE id = 1;COMMIT

4.2 隐式事务

隐式事务会自动提交,无法回滚!

-DDL

隐式使用或修改mysql数据库中的表
当我们使用 ALTER USER、CREATE USER 、DROP USER 、GRANTRENAME USER 、REVOKE 、SETPASSWORD 等语句时也会隐式的提交前边语句所属于的事务。

事务控制或关于锁定的语句

  1. 当我们在一个事务还没提交或者回滚时就又使用 START TRANSACTION 或者BEGIN 语开启了另一个事务时,会 隐式的提交 上一个事务。
  2. 当前的 autocommit 系统变量的值为 OFF,我们手动把它调为 ON 时,也会 隐式的提交 前边语句所属的事务。
  3. 使用LOCK TABLES、UNLOCK TABLES 等关于锁定的语句也会 隐式的提交前边语句所属的事务

加载数据的语句
使用 LOAD DATA 语句来批量往数据库中导入数据时,也会 隐式的提交 前边语句所属的事务

关于MySQL复制的一些语句

使用START SLAVE、STOP SLAVE、RESET SLAVE、CHANGE MASTER TO 等语时会隐式的提交 前边语所属的事务。

其它的一些语句

使用ANALYZE TABLE、CACHE INDEX、 CHECK TABLE、FLUSH、 LOAD INDEX INTO CACHE、OPTIMIZE TABLE、REPAIR TABLE等

5. 事务的常见分类

6. savepoint 的使用

 -- 开始一个事务
BEGINUPDATE book1 SET num = 23 WHERE id = 1;SAVEPOINT s1;#设置保存点UPDATE book1 SET num = 423 WHERE id = 1;ROLLBACK TO s2; #回滚到保存点

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

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

相关文章

秋招算法备战第37天 | 738.单调递增的数字、968.监控二叉树、贪心算法总结

738. 单调递增的数字 - 力扣(LeetCode) 这个问题是关于找到一个小于或等于给定数字n的最大单调递增数字。 我们可以将数字n转换为字符数组,然后从左到右扫描,寻找第一个违反单调递增条件的位置。一旦找到这样的位置,…

安捷伦Agilent37719A通讯分析仪

安捷伦Agilent37719A通讯分析仪(131----4587---6435) ATM和POS测试能力达到2.5 Gb/s OC-48、OC-48c、OC-12、OC-12c、OC-3c、OC-3、OC-1、STS-3、STS-3c、STS-1测试 保护切换时间测量 所有同步速率高达2.5 Gb/s的串联有效负载 SONET环翻转的全面直通模式操作 全开销…

【笔记】第94期-冯永吉-《湖仓集一体关键技术解读》-大数据百家讲坛-厦大数据库实验室主办20221022

https://www.bilibili.com/video/BV1714y1j7AU/?spm_id_from333.337.search-card.all.click&vd_sourcefa36a95b3c3fa4f32dd400f8cabddeaf

【数理知识】协方差,随机变量的的协方差,随机变量分别是单个数字和向量时的协方差

序号内容1【数理知识】自由度 degree of freedom 及自由度的计算方法2【数理知识】刚体 rigid body 及刚体的运动3【数理知识】刚体基本运动,平动,转动4【数理知识】向量数乘,内积,外积,matlab代码实现5【数理知识】协…

【雕爷学编程】MicroPython动手做(30)——物联网之Blynk 2

知识点:什么是掌控板? 掌控板是一块普及STEAM创客教育、人工智能教育、机器人编程教育的开源智能硬件。它集成ESP-32高性能双核芯片,支持WiFi和蓝牙双模通信,可作为物联网节点,实现物联网应用。同时掌控板上集成了OLED…

EXCEL里数值列如何显示序号?如何重新排序? 怎么取得排序后的序号?

目录 1 EXCEL里如何显示序号? 2 如何重新排序? 3 怎么取得排序后的序号? 3.1 rank() 的序号可能不连续 3.2 方法2:SUMPRODUCT((C7>C$7:C$12)/COUNTIF(C$7:C$12,C$7:C$12))1 EXCEL里如何显示序号?如何重新排序…

MySQL数据库面试题:如何定位慢查询?

MySQL数据库面试题:如何定位慢查询? 面试官:MySQL中,如何定位慢查询? 候选人:嗯~,我们当时做压测的时候有的接口非常的慢,接口的响应时间超过了2秒以上,因为我们当时的系…

Linux命令(59)之screen

linux命令之screen 1.screen介绍 linux命令screen是用来进行多窗口管理。 默认screen命令没有安装,安装命令(基于yum源):yum install -y screen 2.screen用法 screen [参数] screen参数 参数说明-r恢复离线的screen作业-ls显示所有的screen作业 3.…

echarts 饼图的label放置于labelLine引导线上方

一般的饼图基础配置后长这样。 想要实现将文本放置在引导线上方,效果长这样 const options {// ...series: [{label: {padding: [0, -40],},labelLine: {length: 10,length2: 50,},labelLayout: {verticalAlign: "bottom",dy: -10,},},], };label.padd…

Zip压缩包密码忘记了,怎么办?

Zip压缩包设置了密码,解压的时候就需要输入正确对密码才能顺利解压出文件,正常当我们解压文件或者删除密码的时候,虽然方法多,但是都需要输入正确的密码才能完成。忘记密码就无法进行操作。 那么,忘记了zip压缩包的密…

CNN成长路:从AlexNet到EfficientNet(01)

一、说明 在 10年的深度学习中,进步是多么迅速!早在 2012 年,Alexnet 在 ImageNet 上的准确率就达到了 63.3% 的 Top-1。现在,我们超过90%的EfficientNet架构和师生训练(teacher-student)。 如果我们在 Ima…

基于C#的应用程序单例唯一运行的完美解决方案 - 开源研究系列文章

今次介绍一个应用程序单例唯一运行方案的代码。 我们知道,有些应用程序在操作系统中需要单例唯一运行,因为程序多开的话会对程序运行效果有影响,最基本的例子就是打印机,只能运行一个实例。这里将笔者单例运行的代码共享出来&…

实现5*5正方形网格x轴和y轴显示对应数值组件封装

实现5*5正方形网格x轴和y轴显示对应数值组件封装 需求&#xff1a;按5*5的正方形网格&#xff0c;根据目标数据的x和y轴值显示对应的文字&#xff0c;实现效果图如下&#xff1a;&#xff08;当前目标数值&#xff1a;x2&#xff0c;y2&#xff09; 代码如下&#xff1a; <…

分布式系统:ACID与CAP

ACID: 在计算机科学中&#xff0c;ACID是数据库事务的一组特性&#xff0c;旨在保证数据的有效性&#xff0c;即使在出现错误、断电和其他意外情况下也能保持数据的一致性。在数据库的上下文中&#xff0c;满足ACID属性的一系列数据库操作&#xff08;可以被视为对数据的单一逻…

【云原生】K8S二进制搭建三:高可用配置

目录 一、部署CoreDNS二、配置高可用三、配置负载均衡四、部署 Dashboard 一、部署CoreDNS 在所有 node 节点上操作 #上传 coredns.tar 到 /opt 目录中 cd /opt docker load -i coredns.tar在 master01 节点上操作 #上传 coredns.yaml 文件到 /opt/k8s 目录中&#xff0c;部…

servlet生命周期和初始化参数传递

servlet生命周期和初始化参数传递 1、servlet生命周期 只有第一次访问才会初始化&#xff0c;之后访问都只执行service中的。 除非tomcat关闭重新启动&#xff1a; 2、初始化参数传递

决策树与随机森林

目录 决策树是&#xff1a;Why&#xff1a;How&#xff1a;基本概念决策树生成举例决策树缺点参考 Demo 随机森林1.是&#xff1a;2.Why&#xff1a;3.How&#xff1a;参考 Demo 决策树 是&#xff1a; 1.一种有监督的分类&#xff08;或预测&#xff09;算法。 2.利用属性、…

并查集模板的应用:连通块

一、链接 837. 连通块中点的数量 二、题目 给定一个包含 nn 个点&#xff08;编号为 1∼n1∼n&#xff09;的无向图&#xff0c;初始时图中没有边。 现在要进行 mm 个操作&#xff0c;操作共有三种&#xff1a; C a b&#xff0c;在点 aa 和点 bb 之间连一条边&#xff0c…

Windows server上用nginx部署vue3项目

Windows server上用nginx部署vue3项目 一、Node中node_modules文件夹及package.json文件的作用说明二、VUE3项目打包三、Windows Server上的Nginx部署 一、Node中node_modules文件夹及package.json文件的作用说明 node_modules是安装node后用来存放用包管理工具下载安装的包的…

快速消除视频的原声的技巧分享

网络上下载的视频都会有视频原声或者背景音乐&#xff0c;如果不喜欢并且想更换新的BGM要怎么操作呢&#xff1f;今天小编就来教你如何快速给多个视频更换新的BGM&#xff0c;很简单&#xff0c;只需要将原视频的原声快速消音同时添加新的背景音频就行&#xff0c;一起来看看详…