mysql 事务基本介绍

目录

命令小结

一      MySQL事务的概念

(一)事务介绍

(二)事务特点

(三)事务的ACID特点

1,原子性

1.1 原子性具体形容

1.2 原子性案例

2 ,一致性

2.1一致性具体介绍

2.2 一致性案例

3,隔离性 

3.1 隔离性具体介绍

4 ,持久性

4.1 持久性具体介绍

二    事务之间的相互影响

(一)脏读(读取未提交数据)

1,脏读定义

2,案例

(二)不可重复读(前后多次读取,数据内容不一致)

1,不可重复读定义

(三)幻读(前后多次读取,数据总量不一致)

1,幻读定义

(四)丢失更新

1,丢失更新定义

2,案例

(五)不可重复读 和幻读区别

(六)总结

三    Mysql及事务隔离级别(四种)

(一)read uncommitted  未授权读取

(二)Read Committed   授权读取

(三)Repeatable Read   可重复读取

(四)Serializable 串行化

四  事务隔离级别的作用范围

(一)查询全局事务隔离级别

(二)查询会话事务隔离级别

(三)设置全局事务隔离级别

(四)设置会话事务隔离级别

五    事务控制语句

(一)开启事务

(二)提交事务

(三)回滚

(四)设置回滚点

(五)回滚到回滚点

(六)实例回滚

​六   使用 set 设置控制事务

(一)命令

(二)注意事项


命令小结

show global variables like '%isolation%';
 
查询全局事务隔离级别
 
show session variables like '%isolation%';
 
查询会话事务隔离级别
 
set global transaction isolation level read committed;
 
设置全局事务隔离级别
 
set session transaction isolation level read committed;
 
设置会话事务隔离级别
 
BEGIN显式地开启一个事务
COMMIT提交事务,并使已对数据库进行的所有修改变为永久性的
ROLLBACK回滚会结束用户的事务,并撤销正在进行的所有未提交的修改。
 
SAVEPOINT S1

使用 SAVEPOINT 允许在事务中创建一个回滚点,一个事务中可以有多个 SAVEPOINT;“S1”代表回滚点名称。

ROLLBACK TO [SAVEPOINT] S1把事务回滚到标记点。
 
SET AUTOCOMMIT=0;#禁止自动提交
SET AUTOCOMMIT=1;开启自动提交,Mysql默认为1
SHOW VARIABLES LIKE 'AUTOCOMMIT';查看Mysql中的AUTOCOMMIT值
 

一      MySQL事务的概念

(一)事务介绍

 MySQL 事务主要用于处理操作量大,复杂度高的数据。比如说,在人员管理系统中, 要删除一个人员,即需要删除人员的基本资料,又需要删除和该人员相关的信息,如信箱, 文章等等。这样,这些数据库操作语句就构成一个事务!
 

(二)事务特点

●事务是一种机制、一个操作序列,包含了一组数据库操作命令,并且把所有的命令作为一个整体           一起向系统提交或撤销操作请求,即这一组数据库命令要么都执行,要么都不执行。

●事务是一个不可分割的工作逻辑单元,在数据库系统上执行并发操作时,事务是最小的控制单元。

●事务适用于多用户同时操作的数据库系统的场景,如银行、保险公司及证券交易系统等等。

●事务是通过事务的整体性以保证数据的一致性。

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

(三)事务的ACID特点

ACID,是指在可靠数据库管理系统(DBMS)中,事务(transaction)应该具有的四个特性:原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)、持久性(Durability)。这是可靠数据库所应具备的几个特性。

1,原子性

指事务是一个不可再分割的工作单位,事务中的操作要么都发生,要么都不发生。

1.1 原子性具体形容

事务是一个完整的操作,事务的各元素是不可分的。
事务中的所有元素必须作为一个整体提交或回滚。
如果事务中的任何元素失败,则整个事务将失败。

1.2 原子性案例

A给B转帐100元钱的时候只执行了扣款语句,就提交了,此时如果突然断电,A账号已经发生了扣款,B账号却没收到加款,在生活中就会引起纠纷。这种情况就需要事务的原子性来保证事务要么都执行,要么就都不执行。

2 ,一致性

指在事务开始之前和事务结束以后,数据库的完整性约束没有被破坏。

2.1一致性具体介绍

当事务完成时,数据必须处于一致状态。
在事务开始前,数据库中存储的数据处于一致状态。
在正在进行的事务中,数据可能处于不一致的状态。
当事务成功完成时,数据必须再次回到已知的一致状态。

2.2 一致性案例

案例:
对银行转帐事务,不管事务成功还是失败,应该保证事务结束后表中A和B的存款总额跟事务执行前一致。
 

3,隔离性 

指在并发环境中,当不同的事务同时操纵相同的数据时,每个事务都有各自的完整数据空间。

3.1 隔离性具体介绍

对数据进行修改的所有并发事务是彼此隔离的,表明事务必须是独立的,它不应以任何方式依赖于或影响其他事务。
修改数据的事务可在另一个使用相同数据的事务开始之前访问这些数据,或者在另一个使用相同数据的事务结束之后访问这些数据。
 

4 ,持久性

在事务完成以后,该事务所对数据库所作的更改便持久的保存在数据库之中,并不会被回滚。

4.1 持久性具体介绍

指不管系统是否发生故障,事务处理的结果都是永久的。
一旦事务被提交,事务的效果会被永久地保留在数据库中。

二    事务之间的相互影响

(一)脏读(读取未提交数据)

1,脏读定义

脏读指的是读到了其他事务未提交的数据,未提交意味着这些数据可能会回滚,也就是可能最终不会存到数据库中,也就是不存在的数据。读到了并一定最终存在的数据,这就是脏读

2,案例

比如事务B执行过程中修改了数据X,在未提交前,事务A读取了X,而事务B却回滚了,这样事务A就形成了脏读。 也就是说,当前事务读到的数据是别的事务想要修改成为的但是没有修改成功的数据。

(二)不可重复读(前后多次读取,数据内容不一致)

1,不可重复读定义

个事务内两个相同的查询却返回了不同数据。这是由于查询时系统中其他事务修改的提交而引起的。
 

(三)幻读(前后多次读取,数据总量不一致)

1,幻读定义

一个事务对一个表中的数据进行了修改,这种修改涉及到表中的全部数据行。同时,另一个事务也修改这个表中的数据,这种修改是向表中插入一行新数据。那么,操作前一个事务的用户会发现表中还有没有修改的数据行,就好象发生了幻觉一样。

(四)丢失更新

1,丢失更新定义

两个事务同时读取同一条记录,A先修改记录,B也修改记录(B不知道A修改过),B提交数据后B的修改结果覆盖了A的修改结果。

2,案例

A B 同时修改 一个数据

A B 先后提交事务 B 会覆盖A 的数据

(五)不可重复读 和幻读区别

  • 发生的原因不同。不可重复读主要是由于在同一个事务内,其他事务对数据进行了修改(如更新或删除)操作,导致事务内多次读取同一数据时,得到的结果不一致。而幻读则主要是由于在同一个事务内,其他事务插入了新的满足查询条件的数据,或者在事务执行过程中,有数据被删除,导致再次执行相同的查询时,得到的结果集与之前不同。

  • 表现形式不同。不可重复读关注的是单个数据行的内容变化,即事务内多次读取同一数据行的值,可能因为其他事务的修改而有所不同。而幻读关注的是数据行的增加或减少,即在事务内多次查询满足条件的记录集时,可能因为其他事务插入了新的满足条件的数据行或者删除了某些数据行,而导致查询结果集的改变。

即不可重复读 是前后读取 看到数据内容不一致

   幻读            是前后读取 看到数据总量不一致

(六)总结

三    Mysql及事务隔离级别(四种)

(一)read uncommitted  未授权读取

允许脏读取,即一个事务可以读取到另一个未提交事务修改的数据。但同时,不允许更新丢失

安全性最差   但性能最好 (不使用)

(二)Read Committed   授权读取

允许不可重复读取,即一个事务只能读取已经提交的数据。这样可以避免脏读问题,但仍然可能存在不可重复读和幻读问题。

安全性较差  性能较好  (oracle 数据库 默认就是这种)

(三)Repeatable Read   可重复读取

在这个级别下,一个事务在执行过程中多次读取相同的数据时,能够保证数据不会被其他事务修改。这可以避免脏读和不可重复读,但仍然可能存在幻读问题。

可以解决脏读 和 不可重复读 —mysql默认的
可重复读。无论其他事务是否修改并提交了数据,在这个事务中看到的数据值始终不受其他事务影响
安全性较高,性能较差 (mysql 默认的就是这种)

(四)Serializable 串行化

这是最高的隔离级别,事务会按顺序一个接一个地执行,不允许并发执行。这可以避免脏读、不可重复读和幻读等并发问题,但会降低系统的并发性能

安全性高  性能差   不使用
 

四  事务隔离级别的作用范围

全局级:对所有的会话有效
会话级:|只对当前的会话有效

(一)查询全局事务隔离级别

show global variables like '%isolation%';   

展示全局 变量  像%隔离%   (此处%% 是模糊处理

SELECT @@global.tx_isolation;
 

(二)查询会话事务隔离级别

show session variables like '%isolation%';

SELECT @@session.tx_isolation; 
SELECT @@tx_isolation;

 

(三)设置全局事务隔离级别

set global transaction isolation level read committed;
 

(四)设置会话事务隔离级别

set session transaction isolation level read committed;

五    事务控制语句

(一)开启事务

BEGIN 或 START TRANSACTION:显式地开启一个事务。

(二)提交事务

COMMIT 或 COMMIT WORK:提交事务,并使已对数据库进行的所有修改变为永久性的。

(三)回滚

OLLBACK 或 ROLLBACK WORK:回滚会结束用户的事务,并撤销正在进行的所有未提交的修改。

(四)设置回滚点

SAVEPOINT S1:使用 SAVEPOINT 允许在事务中创建一个回滚点,一个事务中可以有多个 SAVEPOINT;“S1”代表回滚点名称。

(五)回滚到回滚点

ROLLBACK TO [SAVEPOINT] S1:把事务回滚到标记点。

(六)实例回滚

1 创建数据库 

2 创建表


3,原始表数据如下:

4,begin  开启事务

5,设置回滚点1

6,插入 貂蝉数据

7,设置回滚点2

8,插入文丑  数据

9,目前 表数据

10,  回到 回滚点2

11, 回到回滚点1

六   使用 set 设置控制事务

(一)命令

SET AUTOCOMMIT=0;                                                           #禁止自动提交
SET AUTOCOMMIT=1;                                                          #开启自动提交,Mysql默认为1
SHOW VARIABLES LIKE 'AUTOCOMMIT';                          #查看Mysql中的AUTOCOMMIT值

(二)注意事项

如果没有开启自动提交,当前会话连接的mysql的所有操作都会当成一个事务直到你输入rollback|commit;当前事务才算结束。当前事务结束前新的mysql连接时无法读取到任何当前会话的操作结果。
如果开起了自动提交,mysql会把每个sql语句当成一个事务,然后自动的commit。
当然无论开启与否,begin; commit|rollback; 都是独立的事务。

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

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

相关文章

《数字集成电路物理设计》学习笔记(持续更新中)

参考书籍: 《数字集成电路物理设计》pdf下载百度云链接: 链接: https://pan.baidu.com/s/1jOD54q_f9KLhfX6InabTRA?pwd8888 提取码: 8888 复制这段内容后打开百度网盘手机App,操作更方便哦 --来自百度网盘超级会员v8的分享 目录 第1章 集…

索尼下一代游戏主机PS5将于11月20日发售

索尼下一代游戏机PS5将于2020年11月20日发布。据悉,这款游戏机的售价可能会达到499美元(约合人民币3500元)。 我们知道游戏主机的价格低于游戏PC的价格。 既然PS5的主要硬件配置已经公开,那么现在配置一台同样配置的游戏PC需要多少…

WSL2的安装步骤

WSL2(Windows Subsystem for Linux 2)是微软公司开发的一项创新性技术,它在Windows操作系统上提供了一个完整的Linux内核,并允许用户在Windows环境中运行Linux发行版。之前想在Windows上使用Linux系统必须先安装VirtualBox或VMWar…

实战whisper语音识别第一天,部署服务器,可远程访问,实时语音转文字(全部代码和详细部署步骤)

Whisper是OpenAI于2022年发布的一个开源深度学习模型,专门用于语音识别任务。它能够将音频转换成文字,支持多种语言的识别,包括但不限于英语、中文、西班牙语等。Whisper模型的特点是它在多种不同的音频条件下(如不同的背景噪声水…

多线程基础 -概念、创建、等待、分离、终止

文章目录 一、 线程概念1. 什么是线程2. 线程的优点3.线程的缺点4. 线程异常5. 线程用途 二、 Linux进程VS线程1. 进程和线程2. 进程和线程的地址空间3. 进程和线程的关系 三、Linux线程控制1. POSIX线程库2. 线程创建3. 线程ID及进程地址空间布局4. 线程终止5. 线程等待6. 线程…

故障诊断 | 一文解决,RBF径向基神经网络的故障诊断(Matlab)

文章目录 效果一览文章概述专栏介绍模型描述源码设计参考资料效果一览 文章概述

专业140+总分410+南京大学851信号与系统考研经验南大电子信息与通信集成,电通,真题,大纲,参考书。

今年分数出来还是有点小激动,专业851信号与系统140(感谢Jenny老师辅导和全程悉心指导,答疑),总分410,梦想的南大离自己越来越近,马上即将复试,心中慌的一p,闲暇之余&…

#Linux(权限管理)

(一)发行版:Ubuntu16.04.7 (二)记录: (1) (2)-开头代表普通文件 划分为三组: rw- rw- r-- rw-: 文件拥有…

蓝桥杯-体育健将-CPP-贪心

目录 一、题目描述: 二、整体思路: 三、代码: 一、题目描述: 二、整体思路: 要在k分钟内拿最多的金牌,就意味着要参加尽可能多的项目,因此就要选择耗时(比赛时间和休息时间)最少的项目先预处…

【隐私计算实训营003详解隐私计算框架及技术要点】

1. 隐语架构一览 1.1 隐语架构 隐语架构通常指的是一种面向隐私保护计算的软件框架或解决方案,它采用了密码学、可信执行环境(TEE)、多方安全计算(MPC)等多种隐私保护技术来实现在数据加密状态下进行计算,…

API调试管理工具Postman下载及操作介绍

1.下载安装postman地址:https://www.getpostman.com/downloads/ 2.创建项目 3.创建请求API 然后点击save保存api 4.用一个变量保存主域名,方便后续操作 就类似下面的baseurl 5.创建新环境 6.添加变量(如添加本地测试环境url——ba…

[综述笔记]A Survey on Deep Learning for Neuroimaging-Based Brain Disorder Analysis

论文网址:Frontiers | A Survey on Deep Learning for Neuroimaging-Based Brain Disorder Analysis (frontiersin.org) 英文是纯手打的!论文原文的summarizing and paraphrasing。可能会出现难以避免的拼写错误和语法错误,若有发现欢迎评论…

随笔】Git -- 常用命令(四)

💌 所属专栏:【Git】 😀 作  者:我是夜阑的狗🐶 🚀 个人简介:一个正在努力学技术的CV工程师,专注基础和实战分享 ,欢迎咨询! 💖 欢迎大…

CrossOver 23 用户可以免费升级到 CrossOver24吗?CrossOver用户如何升级呢?

也就是上个月(2024年2月底)左右,CrossOver 刚刚更新了 24 版本,CrossOver更新的内容有哪些,大家可以参考这篇文章:CrossOver24.0新功能介绍,这篇文章详细介绍了CrossOver24有哪些新特点&#xf…

Echarts中手柄样式更改

代码: dataZoom: [{start: 0,end: 100,left: 100,bottom: 0,right: 140,backgroundColor: yellow,borderRadius: 15,borderColor: green,dataBackground: {lineStyle: {width: 0},areaStyle: {color: black,opacity: 1,}},selectedDataBackground: {lineStyle: {wi…

搭建自己的博客-拾壹博客

写在前面 唠叨两句 作为一个技术开发人员,没有一个自己的博客,人生注定缺少点什么东西,是不是?最近研究了一些博客搭建,本文是使用开源项目”拾壹博客“进行搭建。 推荐等级 所需技术难度:4星 后续自定义…

全栈的自我修养 ———— uniapp中加密方法

直接按部就班一步一步来 一、首先创建一个js文件填入AES二、创建加密解密方法三、测试 一、首先创建一个js文件填入AES 直接复制以下内容 /* CryptoJS v3.1.2 code.google.com/p/crypto-js (c) 2009-2013 by Jeff Mott. All rights reserved. code.google.com/p/crypto-js/wi…

Matlab快捷键与函数

注释:注释对于代码的重要性我们就不做过多的解释了。不做注释的代码不是好代码。选中要注释的语句,按快捷键CtrlR,或者在命令行窗口上面的注释地方可以进行注释。当然也可以直接在语句前面“%”就可以(注意:一定要用英文符号&…

移动硬盘故障解析:解决无法访问且位置不可用问题

在我们日常的工作和生活中,移动硬盘已成为存储和传输数据的重要工具。然而,有时我们会遇到移动硬盘无法访问且位置不可用的情况,这无疑给数据的存储和访问带来了极大的困扰。本文将深入探讨这一问题,分析其原因,并给出…

如何做时间管理?

前言 本篇是最近学习工作提效系列课程的第一篇,如何做时间管理?关于时间管理的内容老生常谈了,我自己之前也分享过针对时间管理的一些思考,比如 近期对「时间管理」的一些思考, 还有高效能人士的七个习惯的分享【读书…