【MySQL】数据库之事务

news2024/11/19 9:19:08

目录

一、什么是事务

二、事务的ACID是什么?

三、有哪些典型的不一致性问题?

第一种:脏读

第二种:不可重复读

第三种:幻读

第四种:丢失更新

四、隔离级别有哪些?

(1)未提交读(Read Uncommitted(RU)):

(2)提交读(Read Committed(RC)):这是oracle 和 SQL server的默认隔离级别

(3)可重复读(Repeatable Read(RR)):---mysql默认的隔离级别

(4)串行读(Serializable):---相当于锁表

五、如何设置隔离级别?

 六、事务管理操作命令

 七、为什么我们登录MySQL的时候 每一条命令都能直接生效保存,并没有commit和rollback?


一、什么是事务

事务是一组数据库的操作序列,包含一个或多个sql操作命令(增删改),事务将所有的操作命令看做一个不可分割的整体,向数据库系统提交或撤销操作,所有操作要么执行要么不执行。

●事务是一种机制、一个操作序列,包含了一组数据库操作命令,并且把所有的命令作为一个整体一起向系统提交或撤销操作请求,即这一组数据库命令要么都执行,要么都不执行。
●事务是一个不可分割的工作逻辑单元,在数据库系统上执行并发操作时,事务是最小的控制单元。
●事务适用于多用户同时操作的数据库系统的场景,如银行、保险公司及证券交易系统等等。
●事务通过事务的整体性以保证数据的一致性。
●事务能够提高在向表中更新和插入信息期间的可靠性。

总结:所谓事务,它是一个操作序列,这些操作要么都执行,要么都不执行,它是一个不可分割的工作单位。

二、事务的ACID是什么?

ACID是指在可靠数据库管理系统DBMS中,事务(transaction)有四个特性,分别为原子性(atomicity)、一致性(consistency)、隔离性(isolation)、持久性(durability)。

  • 原子性(atomicity)

原子性是事务的基础,表示一个事务的所有的命令操作为一个单元整体,要么执行,要么不执行;

  • 一致性(consistency)

一致性是事务的目的,为了事务开始前与结束后的数据完整与一致性;

  • 隔离性(isolation)

隔离性是事务的手段,支持在多个事务并发操作的时候,访问相同的资源的时候,各自拥有独立的数据空间;

  • 持久性(durability)

持久性是事务的结果,表示在完成事务以后,事务对数据的更改将会做永久保存,不会回滚。

三、有哪些典型的不一致性问题?

当多个客户端并发地访问同一个表时,可能出现下面的一致性问题:

第一种:脏读

脏读就是多个事务都在运行中,其中事务a修改完数据以后并没有结束事务,事务b能看到事务a的修改结果,这就是脏读。

举例实际案例中:

第二种:不可重复读

不可重复读就是多个事务在运行中,其中事务a修改了数据并提交以后,事务b能看到事务a的修改,这就是不可重复读

举例实际案例中:

第三种:幻读

幻读就是多个事务在运行过程中,事务a修改了表数据的所有行,此时事务b也插入了一条数据,并且事务b提交事务,此时事务a能看到事务b的数据,这就是幻读

 举例实际案例中:

第四种:丢失更新

丢失更新的时候,多个事务在进行中,此时事务b对某字段进行了修改并提交,此时事务a并不知情,同时对该字段进行了修改,覆盖了事务b的修改,这就是丢失更新。

  举例实际案例中:

四、隔离级别有哪些?

隔离级别分为四种,事务的隔离级别决定了事务之间可见的级别。
MySQL事务支持如下四种隔离,用以控制事务所做的修改,并将修改通告至其它并发的事务:

(1)未提交读(Read Uncommitted(RU)):

允许脏读,即允许一个事务可以看到其他事务未提交的修改。

(2)提交读(Read Committed(RC)):这是oracle 和 SQL server的默认隔离级别

允许一个事务只能看到其他事务已经提交的修改未提交的修改是不可见的。防止脏读。

(3)可重复读(Repeatable Read(RR)):---mysql默认的隔离级别

确保如果在一个事务中执行两次相同的语句,都能得到相同的结果,不管其他事务是否提交这些修改。可以防止脏读和不可重复读。有条件的不允许幻读(InnoDB存储引擎可以不允许)

(4)串行读(Serializable):---相当于锁表

完全串行化的读,将一个事务与其他事务完全地隔离。每次读都需要获得表级共享锁,读写相互都会阻塞。可以防止脏读,不可重复读取和幻读,(事务串行化)会降低数据库的效率

五、如何设置隔离级别?

隔离级别在MySQL中是一个变量

设置隔离级别:
set global transaction isolation level 隔离级别名称;     
#全局级别的设置,可在所有会话有效,需要重新登录才可生效

set session transaction isolation level 隔离级别名称;    
#会话级别的设置,在当前会话会话中立即生效


设置全局事务隔离级别:
set global transaction isolation level read committed; ##永久生效
set @@global.tx_isolation='read-committed';   #重启服务后失效

设置会话事务隔离级别:
set session transaction isolation level repeatable read;
set @@session.tx_isolation='repeatable-read';  #重启服务后失效

查询隔离级别,这里的like表示模糊查询 百分号相当于通配符*的作用

查询全局事务隔离级别:
show global variables like '%isolation%';
SELECT @@global.tx_isolation;

查询会话事务隔离级别:
show session variables like '%isolation%';
SELECT @@session.tx_isolation; 
SELECT @@tx_isolation;

 六、事务管理操作命令

begin;             #开启一个事务
....        create database/table    insert into    update XXX set   delete from      #事务性操作
savepoint XX;      #在事务中创建回滚点
rollback to XX;    #在事务中回滚操作到指定的回滚点位置
commit; 或 rollback;    #提交或回滚结束事务

 七、为什么我们登录MySQL的时候 每一条命令都能直接生效保存,并没有commit和rollback?

因为有自动提交事务变量!!!

如果开启自动提交事务,那么会将每一条增删改命令看做一条事务,然后自动提交,

如果说设置为0,就是关闭自动提交,那么会将登录后的所有的操作命令看做一个事务,最终需要commit提交一下,否则不生效!!

set [global/session]  autocommit = 0/1;        #0关闭自动提交,1开启自动提交
show  [global/session]  variables like 'autocommit';

 

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

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

相关文章

Sublime Text 4 中文汉化教程(Version: Build 4169)

Sublime Text 4汉化 1 知识小课堂1.1 sublim简介1.2 其他编辑器 2 安装过程2.1 安装Install Package Control2.2 Install Package2.3 安装工具包2.4 常用的插件2.5 安装中文包 1 知识小课堂 1.1 sublim简介 Sublime是一款代码编辑器,致力于为开发人员提供快速、高…

IDEA 控制台中文出现乱码问题解决

一、问题概述 请看下图 二、问题分析 IDEA控制台输出乱码一般会有三种来源: ① IDEA本身编码错误 ② Tomcat日志输出编码错误 ③ 项目本身原因。 终极原因:IDEA编码和Tomcat编码不一致,统一设置为UTF-8即可。 三、解决思路 修改…

双向循环链表实现C语言关键字中英翻译机 ฅ( ̳• · • ̳ฅ)

目录 1.双向循环链表的声明与定义: 2. 创建链表并对节点中的数据赋初值 3. 插入节点并链接 4.中英翻译 5. 小游戏的实现 6.菜单的实现 7. 释放内存 8.在主函数中用刚才定义的函数实现各种代码 输入样例: 实现方法:双向循环链表来实…

同城配送小程序解决方案

前言 同城配送小程序解决方案。 一、用户用车 用户打开小程序后发货地址自动定位到用户当前位置,用户可通过地址后的>号在地图上选择新的发货地址和卸货地址,小程序会自动规划出行线路,计算距离和运费价格。 用户仅用简单操作后就可以…

【网络协议】远程登录安全连接协议SSH(Secure Shell)

文章目录 什么是SSH协议?SSH为何是安全的?SSH由哪些组件构成?SSH可以帮助实现的功能SSH的工作原理SSH的历史版本常用的SSH工具有哪些SSH配置案例参考Windows 安装SSHUbuntu系统SSH配置Cisco Switch SSH配置华为Switch SSH配置 客户端启用SSH连…

uni-app 命令行创建

1. 首先创建项目,命令如下: npx degit dcloudio/uni-preset-vue#vite-ts uni-app-demo如果出现报错,如下图. 大概率就是没有目录C:\Users\Administrator\AppData\Roaming\npm 解决办法: 创建目录 C:\Users\Administrator\AppData\Roaming\n…

cpp_05_类_string类

1 类的定义 1.1 构造函数 定义:函数名必须与类名相同,且没有返回值类型 ,连void也没有。 构造函数调用时间: 在定义对象的同时自动被调用,而且仅被调用一次: 1)对象定义语句 2)n…

20231226在Firefly的AIO-3399J开发板上在Android11下调通后摄像头ov13850

20231226在Firefly的AIO-3399J开发板上在Android11下调通后摄像头ov13850 2023/12/26 8:22 开发板:Firefly的AIO-3399J【RK3399】 SDK:rk3399-android-11-r20211216.tar.xz【Android11】 Android11.0.tar.bz2.aa【ToyBrick】 Android11.0.tar.bz2.ab And…

基于多反应堆的高并发服务器【C/C++/Reactor】(中)EventLoop初始化

这个Dispatcher是一个事件分发模型,通过这个模型,就能够检测对应的文件描述符的事件的时候,可以使用epoll/poll/select,前面说过三选一。另外不管是哪一个底层的检测模型,它们都需要使用一个数据块,这个数据块就叫做DispatcherData。除此之外,还有另外一个部分,因为…

idea导入spring-framework异常:error: cannot find symbol

从github上clone代码spring-framework到本地后导入idea,点击gradle构建后控制台提示异常: 具体异常信息: /Users/ZengJun/Desktop/spring-framework/buildSrc/src/main/java/org/springframework/build/KotlinConventions.java:44: error:…

智能优化算法应用:基于侏儒猫鼬算法3D无线传感器网络(WSN)覆盖优化 - 附代码

智能优化算法应用:基于侏儒猫鼬算法3D无线传感器网络(WSN)覆盖优化 - 附代码 文章目录 智能优化算法应用:基于侏儒猫鼬算法3D无线传感器网络(WSN)覆盖优化 - 附代码1.无线传感网络节点模型2.覆盖数学模型及分析3.侏儒猫鼬算法4.实验参数设定5.算法结果6.…

【操作系统】探究文件系统奥秘:创建proc文件系统的解密与实战

​🌈个人主页:Sarapines Programmer🔥 系列专栏:Linux专栏:《探秘Linux | 操作系统解密》⏰诗赋清音:月悬苍穹泛清辉,梦随星河徜徉辉。情牵天际云千层,志立乘风意自飞。 ​ 目录 &a…

编译原理-----逆波兰表示法,四元式,三元式,间接三元式

目录 逆波兰表达式 四元式 三元式 间接三元式 逆波兰表达式 逆波兰表示法即后缀表达式,而后缀表达式需要注意: ①遵循从外向内进行分析 ②由算数优先符从低到高进行拆分,例如: 我们以“-”号作为分隔进行拆分,…

STM32逆变器方案

输入电压: 额定输入电压:DC110V 输入电压范围:DC77-137.5V 额定输出参数 电压:200V5%(200VAC~240VAC 可调) 频率: 42Hz0.5Hz(35-50 可调) 额定输出容量:1…

LNPMariadb数据库分离|web服务器集群

LNP&Mariadb数据库分离|web服务器集群 网站架构演变单机版LNMP独立数据库服务器web服务器集群与Session保持 LNP与数据库分离1. 准备一台独立的服务器,安装数据库软件包2. 将之前的LNMP网站中的数据库迁移到新的数据库服务器3. 修改wordpress网站配置…

【SpringBoot篇】解决缓存击穿问题② — 基于逻辑过期方式

🎊专栏【SpringBoot】 🍔喜欢的诗句:天行健,君子以自强不息。 🎆音乐分享【如愿】 🎄欢迎并且感谢大家指出小吉的问题🥰 文章目录 🎍什么是逻辑过期方式⭐思路🌹代码 &am…

Spring实战系列(三)了解容器的基本实现

我们可以通过GitHub或者码云下载spring-framework源码,这边是基于5.X版本进行下载学习的。 地址:https://github.com/spring-projects/spring-framework 分析Spring源码是非常一件的难的事情,只能一步步学习,一步步记录。 前面在…

人工智能的弱点有哪些?

尽管人工智能(Artificial Intelligence,AI)在许多领域取得了巨大的进展和成就,但它仍然存在一些弱点和挑战。以下是人工智能的一些常见弱点: 1. 数据依赖性:人工智能算法通常需要大量的高质量数据进行训练…

每日一题(LeetCode)----二叉树-- 二叉树的右视图

每日一题(LeetCode)----二叉树-- 二叉树的右视图 1.题目(199. 二叉树的右视图) 给定一个二叉树的 根节点 root,想象自己站在它的右侧,按照从顶部到底部的顺序,返回从右侧所能看到的节点值。 示例 1: 输入: [1,2,3,nu…

flex--伸缩性

1.flex-basis flex-basis 设置的是主轴方向的基准长度,会让宽度或高度失效。 备注:主轴横向:宽度失效;主轴纵向:高度失效 作用:浏览器根据这个属性设置的值,计算主轴上是否有多余空间&#x…