【MySQL学习笔记009】事务

news2024/12/23 22:16:31

一、事务简介

        事务是一组操作的集合,它是一个不可分割的工作单位,事务会把所有的操作作为一个整体一起向系统提交或撤销操作请求,即这些操作要么同时成功,要么同时失败。

二、事务操作

1、操作1

        查看/设置事务提交方式

                select @@autocommit; 输出为1 --自动提交,0--手动提交

                set @@autocommit=0;

        提交事务

                commit;

        回滚事务

                rollback;

2、操作2

        开启事务

                start transaction 或 begin;

        提交事务

                commit;

        回滚事务

                rollback;

三、事务四大特性

        原子性(Atomicity):事务是不可分割的最小操作单元,要么全部成功,要么全部失败;

        一致性(Consistency):事务完成时,必须使所有的数据都保持一致状态。

        隔离性(Isolation):数据库系统提供的隔离机制,保证事务在不受外部并发操作影响的独立环境下运行。

        持久性(Durability):事务一旦提交或回滚,它对数据库中的数据改变就是永久的。

四、并发事务问题

五、事务隔离等级

        -- 查看事务隔离级别

                select @@transaction_isolation;

        -- 设置事务隔离级别

                set [session | global ] transaction isolation level [ read uncommitted | read committed | repeatavle read | serializable ]

        注意:事务的隔离级别越高,性能越低。

六、案例

        打开两个命令符窗口

        登录数据库 mysql -u root -p,切换到练习数据库use pra;

        开启事务 start transaction

        先查询一下表中数据 select * from account;

        在第一个命令符窗口中设置事务隔离级别为read uncommitted——>set session transaction isolation level read uncommitted;

        然后在第二个命令符窗口中输入命令:update account set money = money - 1000 where name = '张三'; 因为目前是开启的事务模式,所以不提交数据库是不会进行相关操作;但是在第一个命令符窗口中执行:select * from account; 会发现account表中的数据已经被修改,这就是脏读现象。

        若在第一个命令符窗口中执行set session transaction isolation level read committed;即设置事务隔离级别为read committed,重复以上操作,则不会出现脏读现象。

        设置read committed,解决脏读问题后,但是不能解决不可重复读现象。开启事务 start transaction(两个窗口),第一个窗口执行 select * from account; 然后第二窗口执行 update account set money = money + 1000 where name = '张三';,但是不执行提交,然后在第一个窗口再次执行 select * from account;发现两次查询结果一样,然后第二个窗口执行提交,第一个窗口执行查询,结果发现变化,这就是不可重复读。

        将事务隔离级别设置为repeatable read,重复上述操作,可实现重复读取。

        然而,repeatable read 隔离级别,无法解决幻读现象,开启事务 start transaction(两个窗口),第一个窗口执行select * from account where id = 3;返回空值,然后在第二个窗口执行 insert into account (id, name, money) values (3, '王五', 2000);,提交。再用第一个窗口查询,同样返回空值,然后再用第一个窗口执行插入命令 insert into account (id, name, money) values (3, '大刀王五', 2000); 返回error报错account中主键3重复,那么再次查询主键为3的数据,返回依然没有值。这种现象就是幻读。

        幻读现象可以使用serializable(串行化)隔离级别解决。

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

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

相关文章

基于Hexo+GitHub Pages 的个人博客搭建

基于HexoGitHub Pages 的个人博客搭建 步骤一:安装 Node.js 和 Git步骤二:创建Github Pages 仓库步骤二:安装 Hexo步骤三:创建 Hexo 项目步骤四:配置 Hexo步骤五:创建新文章步骤六:生成静态文件…

c语言:从函数中返回指针

return关键词可以从被调函数中返回一个值到主调函数。现在我们尝试让它返回一个指针到主调函数中。 #include <stdio.h> int* func() { int n 100; return &n; } int main() { int* p func(); printf("%d\n", *p); return 0; } 我们在函数 func 中定义…

【FPGA 器件比较】Altera -- Xilinx

比较以下市场前二名的产品线及定位 应用场景XilinxAltera高性能VersalAgilex F/I性能Virtex / Kintex / Artix / Zynq UltraScaleAgilex F/I / Stratix 10中档Virtex / Kintex / Zynq ~ 7 / UltraScaleStratix 10 / Arria 10低成本Artix-7 Sparton-7Cyclone 10 如上表&#x…

sql_lab之sqli中的head头注入,less18

报错注入中的head注入&#xff08;less-18&#xff09; 1.输入用户名和密码123 123显示登录错误 2.输入用户名和密码123’ 123显示登录错误 则证明不是普通报错注入&#xff0c;因为有用户名和密码框&#xff0c;如果不是普通报错注入则尝试head注入 3.用burp进行爆破&#x…

1865_发动机控制器ECU

Grey 全部学习内容汇总&#xff1a; GitHub - GreyZhang/g_ECU_hacking: some learning notes about ECU(engine control unit) hacking. 发动机控制器ECU ECU有多种解释&#xff0c;这里的解释主要是指发动机控制器。这一份笔记&#xff0c;整理了发动机控制器的基本功能以…

网线制作,集线器、交换机、路由器的介绍以及路由器的设置

目录 一. 网线制作 1.1 制作材料 1.2 网线标准 1.3 网线做法 二. 集线器、交换机、路由器介绍 前言 简介 简单来说 三. 路由器的设置 设置1 设置2 设置3 设置4 无线设置 一. 网线制作 1.1 制作材料 网线 …

实现打印一个数字金字塔。例如:输入5,图形如下图所示

1*12**123***1234**** 12345*****#include<stdio.h> void main() {int i,j,l,n,k;scanf("%d",&n);/**********Program**********//********** End **********/ } 当我们拿到这个题目的时候可以看见题目给了我们五个变量&#xff0c;其中n是我们输入的数…

pip 常用指令 pip install 命令用法介绍

&#x1f4d1;pip 常用命令归类整理 pip install 是一个 Python 包管理器命令&#xff0c;用于安装 Python 包。pip 是 Python 的一个重要工具&#xff0c;可以用来安装、升级和卸载 Python 包。 pip install 命令的一些常见参数有 -r&#xff1a;从一个需求文件中安装所有的…

vue 实现签字功能

1、安装&#xff1a;npm install vue-esign --save 2、main.js文件中全局引入&#xff1a; // 签字 import vueEsign from vue-esign Vue.use(vueEsign) 3、页面内容 <vue-esign ref"esign" :width"800" :height"300" :isCrop"isCro…

vue3(六)-基础入门之自定义组件与插槽、ref通信

一、全局组件 html: <div id"app"><mytemplace></mytemplace> </div>javascript: <script>const { createApp } Vueconst app createApp({})app.component(mytemplace, {template: <div><button>返回</button>…

kubelet源码学习(一):kubelet工作原理、kubelet启动过程

本文基于Kubernetes v1.22.4版本进行源码学习 1、kubelet工作原理 1&#xff09;、kubelet核心工作 kubelet的工作核心就是一个控制循环&#xff0c;即&#xff1a;SyncLoop&#xff08;图中的大圆圈&#xff09;。而驱动这个控制循环运行的事件&#xff0c;包括&#xff1a;P…

2023航天推进理论基础考试划重点(W老师)-液体火箭发动机1

适用于期末周求生欲满满的西北工业大学学生。 1、液体火箭发动机的基本组成及功能是什么&#xff1f; 推力室组件、推进剂供应系统、阀门与调节器、发动机总装元件等组成。 2、液体火箭发动机的分类和应用是什么&#xff1f;3、液体火箭发动机系统、分系统的概念是什么&…

算法复杂度-BigO表示法

1.时间复杂度--大O表示法 算法的渐进时间复杂度&#xff0c;T(n)O(f(n)) T&#xff08;n&#xff09;表示算法的渐进时间复杂度 f&#xff08;n&#xff09;表示代码执行的次数 O&#xff08;&#xff09;表示正比例关系 2.常用的时间复杂度量级 3.举例 &#xff08;1&am…

Vue CLI 设置 publicPath:打包后的应用可部署在任意路径

前言 领导要重新部署多个应用环境&#xff0c;且不受路径层级影响。 于是找到了 Vue CLI 配置 publicpath 配置说明 下图所示&#xff1a; / &#xff1a;默认值&#xff0c;应用部署在根路径上&#xff1b;./&#xff1a;注意前面加了一个点&#xff0c;应用可部署在任意路…

Qt designer界面和所有组件功能的详细介绍(全!!!)

PyQt5和Qt designer的详细安装教程&#xff1a;https://blog.csdn.net/qq_43811536/article/details/135185233?spm1001.2014.3001.5501 目录 1. 界面介绍2. Widget Box 常用组件2.1 Layouts&#xff08;布局&#xff09;2.2 Spacers&#xff08;间隔器&#xff09;2.3 Item V…

代码随想录刷题题Day21

刷题的第二十一天&#xff0c;希望自己能够不断坚持下去&#xff0c;迎来蜕变。&#x1f600;&#x1f600;&#x1f600; 刷题语言&#xff1a;C Day21 任务 ● 216.组合总和III ● 17.电话号码的字母组合 1 组合总和III 216.组合总和III 思路&#xff1a; 在[1,2,3,4,5,6,…

P5 RV1126编码测试Demo

目录 前言 01 测试Demo大致流程图 02 代码分析 2.1 VI设备初始化 2.2 使能通道 —— RK_MPI_VI_EnableChn 2.3 VI 和 VENC绑定 2.4 创建 编码线程 前言 从本章开始我们将要学习嵌入式音视频的学习了 &#xff0c;使用的瑞芯微的开发板 &#x1f3ac; 个人主页&#xff1a…

JavaEE:CAS详解

一.什么是CAS CAS: 全称 Compare and swap &#xff0c;字面意思 :” 比较并交换 “ &#xff0c;一个 CAS 涉及到以下操作&#xff1a; 我们假设内存中的原数据V&#xff0c;旧的预期值A&#xff0c;需要修改的新值B。 我们来进行操作&#xff1a; 1. 比较 V 和 A 是否相等。…

Java多线程、线程池及线程同步(synchronized关键字、悲观锁、乐观锁)

1.进程与线程定义 进程包含线程&#xff0c;如一个百度网盘进程&#xff0c;该进程的线程可以有上传&#xff0c;下载。 2.创建线程的三种方式 方式1-继承Thread类 方式2-实现Runnabled接口 1.常规写法 2.匿名内部类写法 方式3-实现Callable接口 示例代码&#xff1a; f1.get…

WorkPlus超级APP助力企业节省IT人力成本,实现快速移动化

在信息化时代&#xff0c;移动应用已经成为企业发展的重要组成部分。然而&#xff0c;开发和维护原生客户端的成本却相对较高&#xff0c;需要大量的iOS、安卓和桌面端工程师。为了解决这一问题&#xff0c;WorkPlus作为一个功能完备的超级APP&#xff0c;为企业节约了大量的IT…