MYSQL进阶-事务

1.什么是数据库事务?

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

2.事务的特性

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

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

3.事务的状态

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

在这里插入图片描述

4. 如何使用事务

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

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

BEGIN

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

这里是引用

查看自动提交变量

SHOW variables like 'autocommit';

设置系统不自动提交

SET autocommit = false;

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

4.1 显式事务

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

BEGIN

 UPDATE 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 的使用

 -- 开始一个事务
BEGIN

 UPDATE book1 SET num = 23 WHERE id = 1;
 
 SAVEPOINT s1;#设置保存点
 
 UPDATE book1 SET num = 423 WHERE id = 1;
 
 ROLLBACK TO s2; #回滚到保存点

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

使用 LangChain 搭建基于 Amazon DynamoDB 的大语言模型应用

LangChain 是一个旨在简化使用大型语言模型创建应用程序的框架。作为语言模型集成框架,在这个应用场景中,LangChain 将与 Amazon DynamoDB 紧密结合,构建一个完整的基于大语言模型的聊天应用。 本次活动,我们特意邀请了亚马逊云科…

华为云CTS 使用场景

云审计服务 CTS 云审计服务(Cloud Trace Service),帮助您监控并记录华为云账号的活动,包括通过控制台、API、开发者工具对云上产品和服务的访问和使用行为,提供对各种云资源操作记录的收集、存储和查询功能&#xff0…

应用在多媒体手机中的低功率立体声编解码器

多媒体手机一般是指可以录制或播放视频的手机。多媒体的定义是多种媒体的综合,一般是图像、文字、声音等多种结合,所以多媒体手机是可以处理和使用图像文字声音相结合的移动设备。目前流行的多媒体概念,主要是指文字、图形、图像、声音等多种…

【0803作业】创建两个线程:其中一个线程拷贝图片的前半部分,另一个线程拷贝后半部分(4种方法)

方法一:使用pthread_create、pthread_exit、pthread_join函数【两个线程不共用同一份资源】 先在主函数创建并清空拷贝的目标文件,再创建两个线程,在两个线程内部同时打开要读取的文件以及要拷贝的目标文件(两个线程不共用同一份资…

Vulnhub: BlueMoon: 2021靶机

kali:192.168.111.111 靶机:192.168.111.174 信息收集 端口扫描 nmap -A -sC -v -sV -T5 -p- --scripthttp-enum 192.168.111.174 80端口目录爆破,发现文件:hidden_text gobuster dir -u http://192.168.111.174 -w /usr/sha…

牛客网Verilog刷题——VL41

牛客网Verilog刷题——VL41 题目答案 题目 请设计一个可以实现任意小数分频的时钟分频器,比如说8.7分频的时钟信号,注意rst为低电平复位。提示:其实本质上是一个简单的数学问题,即如何使用最小公倍数得到时钟周期的分别频比。设小…

RabbitMQ教程与安装

1 在CentOS7中安装RabbitMQ 在 CentOS 中安装 RabbitMQ 的命令如下: 首先,确保已经安装了 EPEL 软件包存储库。如果没有,请运行以下命令安装它: sudo yum install epel-release 更新系统的软件包列表: sudo yum upda…

成本控制策略:加强企业安全

我们生活在一个不确定的时代。大多数经济学家预测,今年全球经济将继续放缓,亚太地区当然也不会逆势而上。 在供应链问题、大规模裁员、高通胀和高利率之间,我们毫不奇怪地看到大多数公司和行业采取谨慎态度,战略、增长计划和预算…

艺术二维码 API 申请及使用

艺术二维码是一种创新的技术产品,它将二维码与美观的背景图像相结合,创造出既实用又美观的作品。它们不仅具有传统二维码的功能性,能被智能设备快速扫描识别,还加入了艺术元素,增强了视觉吸引力和品牌识别度。其中&…

GPT Prompt编写的艺术:如何提高AI模型的表现力

随着AI技术的迅速发展,人工智能模型变得越来越强大,能够协助我们完成各种任务。然而,如何更好地利用AI的能力仍然存在很大的探索空间。在与AI进行交互的过程中,我们主要依赖于Prompt,不管是直接与大模型交互&#xff0…

opencv-34 图像平滑处理-2D 卷积 cv2.filter2D()

2D卷积是一种图像处理和计算机视觉中常用的操作,用于在图像上应用滤波器或卷积核,从而对图像进行特征提取、平滑处理或边缘检测等操作。 在2D卷积中,图像和卷积核都是二维的矩阵或数组。卷积操作将卷积核在图像上滑动,对每个局部区…

Robot Framweork之UI自动化测试---分层设计

Robot Framework 的分层思想是一种测试设计和代码组织的模式,它将测试用例的实现和测试执行逻辑分离,以提高测试的可维护性、可读性和可扩展性。 一、分层思想 在实际项目中,一般分为三层:元素层,流程层,用…

k8s之Helm安装

一、最快安装–官网提供的脚本–默认获取最新版本 cd /usr/local/src/ curl -fsSL -o get_helm.sh https://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-3 chmod 700 get_helm.sh ./get_helm.shhelm search hub wordpresssource <(helm completion bash) h…

pycharm——漏斗图

import pyecharts.options as opts from pyecharts.charts import Funnel""" Gallery 使用 pyecharts 1.1.0 参考地址: https://echarts.apache.org/examples/editor.html?cfunnel目前无法实现的功能:1、暂时无法对漏斗图的长宽等范围操作进行修改 ""…

Metric3D:Towards Zero-shot Metric 3D Prediction from A Single Image

参考代码&#xff1a;Metric3D 介绍 在如MiDas、LeReS这些文章中对于来源不同的深度数据集使用归一化深度作为学习目标&#xff0c;则在网络学习的过程中就天然失去了对真实深度和物体尺寸的度量能力。而这篇文章比较明确地指出了影响深度估计尺度变化大的因素就是焦距 f f f…

Ubuntu20.04 + QT5.14.2 + VTK8.2.0 + PCL 1.10 环境配置

目录 Ubuntu20.04 QT5.14.2 VTK8.2.0 PCL 1.10 环境配置一、VTK 编译和安装1、库依赖&#xff1a;2、下载资源&#xff1a;[下载VTK8.2.0](https://www.vtk.org/files/release/8.2/VTK-8.2.0.tar.gz)3、编译&#xff1a;4、安装5、qtcreator 配置编译的libQVTKWidgetPlugin.…

解密Redis:应对面试中的缓存相关问题2

面试官&#xff1a;Redis集群有哪些方案&#xff0c;知道嘛&#xff1f; 候选人&#xff1a;嗯~~&#xff0c;在Redis中提供的集群方案总共有三种&#xff1a;主从复制、哨兵模式、Redis分片集群。 面试官&#xff1a;那你来介绍一下主从同步。 候选人&#xff1a;嗯&#xff…

C++ 左值和右值

C 左值和右值 左值、右值左值引用、右值引用std::move()std::move()的实现引用折叠 完美转发forward()的实现函数返回值是左值还是右值如何判断一个值是左值还是右值 左值、右值 在C11中所有的值必属于左值、右值两者之一&#xff0c;右值又可以细分为纯右值、将亡值。在C11中…

git clone 登录 github

git clone 登录 github 目录概述需求&#xff1a; 设计思路实现思路分析1.github 设置setting2.输入passwd 参考资料和推荐阅读 Survive by day and develop by night. talk for import biz , show your perfect code,full busy&#xff0c;skip hardness,make a better result…

JVM基础篇-本地方法栈与堆

JVM基础篇-本地方法栈与堆 本地方法栈 什么是本地方法? 本地方法即那些不是由java层面实现的方法&#xff0c;而是由c/c实现交给java层面进行调用&#xff0c;这些方法在java中使用native关键字标识 public native int hashCode()本地方法栈的作用? 为本地方法提供内存空…