MySQL入门篇:事物操作(开启事物,提交事物,回滚事物),事物四大特性(ACID),并发事物问题(脏读,不可重复读,幻读),事物隔离级别

目录

  • 1.事物简介
  • 2.事物操作
    • 1.查看/设置事物提交方式(方式1)
    • 2.开启事物(方式2)
    • 3.提交事物
    • 4.回滚事物
  • 3.事物四大特性(ACID)
    • 1.原子性(Atomicity)
    • 2.一致性(Consistency)
    • 3.隔离性(lsolation)
    • 4.持久性(Durability)
  • 4.并发事物问题
    • 1.脏读
    • 2.不可重复读
    • 3.幻读
  • 5.事物隔离级别
    • 1.查看事务隔离级别
    • 2.设置事务隔离级别

1.事物简介

事务是一组操作的集合,它是一个不可分割的工作单位,事务会把所有的操作作为一个整体一起向系统提交或撒销操作
请求,即这些操作要么同时成功,要么同时失败
默认MySQL的事务是自动提交的,也就是说,当执行一条DML语句,MySQL会立即隐式的提交事务

2.事物操作

1.查看/设置事物提交方式(方式1)

SELECT @@autocommit;
SET @@autocommit=0; -- 设置为手动提交事务

2.开启事物(方式2)

START TRANSACTIONBEGIN;

3.提交事物

COMMIT;

4.回滚事物

ROLLBACK;

事物的操作分为两种方式:
①通过设置事物的提交方式为手动提交,通过commit提交事物,通过rollback去回滚事物。
②通过指令start transaction 或者时begin来开启事物,事物执行操作完成以后,如果事物执行成功,执行commit指令,如果执行失败,执行rollback指令

3.事物四大特性(ACID)

1.原子性(Atomicity)

事务是不可分割的最小操作单元,要么全部成功,要么全部失败
如果在事务执行期间发生故障,数据库将自动回滚事务,使数据恢复到事务之前的状态。

2.一致性(Consistency)

事务完成时,必须使所有的数据都保持一致状态
在事务开始之前,数据库的约束条件必须满足。
如果在事务执行期间违反了约束条件,事务将被回滚,使数据库恢复到一致的状态。

3.隔离性(lsolation)

数据库系统提供的隔离机制,保证事务在不受外部并发操作影响的独立环境下运行。
事务的执行应该与其他事务相互隔离,每个事务应该感觉不到其他事务的存在。
隔离性确保了同时执行的多个事务不会相互干扰,防止并发执行引起的数据不一致问题。

4.持久性(Durability)

事务一旦提交或回滚,它对数据库中的数据的改变就是永久的。
事务成功提交后,对数据库的修改将永久保存,即使系统发生故障也不会丢失。
持久性保证了数据的可靠性和一致性。

4.并发事物问题

在这里插入图片描述

1.脏读

脏读(Dirty read)是指当一个事务在读取另一个事务未提交的数据时发生的情况。
也就是说,一个事务读取了另一个事务修改但尚未提交的数据。
如果这个未提交的事务最终回滚,那么读取的数据就是无效的,这会导致脏读现象。
脏读可能会产生错误或不一致的结果。

2.不可重复读

不可重复读(Non-repeatable read)是指一个事务在相同的查询语句下多次读取同一行数据时,会得到不同的结果
这是由于在事务执行期间,其他事务对该行进行了修改或删除,导致读取到的数据不一致。

例如,事务A在读取某一行数据后,事务B对该行数据进行了修改或删除,然后事务A再次读取同一行数据时,得到的结果和第一次读取的结果不一样。这种现象就是不可重复读

不可重复读可能会导致数据不一致和逻辑错误的发生。
为了解决不可重复读问题,通常使用锁机制多版本并发控制(MVCC)等方法来保证数据的一致性。

3.幻读

幻读(Phantom Read)是指在一个事务内多次执行同一个查询,但在不同的查询中返回了不同的结果集
它与不可重复读不同之处在于,不可重复读是指读取到的行数据发生了变化,而幻读是指读取到的行数发生了变化

例如,事务A在执行某个查询时,返回了一组符合条件的数据行。
随后,事务B在事务A执行期间插入了一些新的数据行,使得事务A再次执行相同的查询时,返回的结果集中出现了新插入的数据行,就像出现了幻觉一样,即发生了幻读。

幻读问题主要是由于并发事务的插入和删除操作引起的。
为了解决幻读问题,通常可以使用锁机制或多版本并发控制(MVCC)等方法来保证数据的一致性。

5.事物隔离级别

READ UNCOMMITTED:读未提交
READ COMMITTED:读已提交
REPEATABLE READ:可重复读
SERIALIZABLE:可串行化

在这里插入图片描述

注意:事物的隔离级别越高,数据库的并发性能越差,数据安全性也更低

1.查看事务隔离级别

SELECT @@TRANSACTION_ISOLATION;

2.设置事务隔离级别

SET[SESSION|GLOBAL] TRANSACTION ISOLATION LEVEL {READ UNCOMMITTED | READ COMMITTED
|REPEATABLE READ|SERIALIZABLE};

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

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

相关文章

MyBatisPlus学习笔记四-扩展功能

1、代码生成器 1.1、官方的1 1.3、官方的2-idea插件 1.3、非官方的-idea插件 2、静态工具 先查询,再分组 3、逻辑删除 4、枚举处理器 5、JSON处理器

使用mininet快速入门ONOS路由交换技术与原理

在SDN下路由交换与传统硬件集成方式的路由交换技术有许多相似之处。其中一个比较重要的点是传统交换机中ASIC (Application Specific Integrated Circuit,专用集成电路)决定了其数据平面所支持的功能,而在SDN中,实现了控制面与数据面的分离。…

UI学习-入门

教程:零基础学UI设计,应该先从哪些设计软件入手?【酸梅干超人出品】 一 软件 云端协作工具:即时设计、figma 原型设计:protopie 平面设计: PS 即时设计可设置动态交互、可设置样机。该平台教学方便做的…

selenium上传单个文件及上传多个文件

单个文件 直接传入文件路径 element driver.find_element_by_xpath(//input[type"file"]) element.send_keys(/home/data/download/test.png)多个文件 使用 \n 或者 \t\n 分割文件路径 element driver.find_element_by_xpath(//input[type"file"]) e…

数组练习 Leetcode 566.重塑矩阵

在 MATLAB 中,有一个非常有用的函数 reshape ,它可以将一个 m x n 矩阵重塑为另一个大小不同(r x c)的新矩阵,但保留其原始数据。 给你一个由二维数组 mat 表示的 m x n 矩阵,以及两个正整数 r 和 c &#…

第五天业务题

5-1 你们项目中签到为什么要使用bitmap bitmap是Redis中的String类型里的一种类型,存储数据是以二进制(bit位)为单位进行存储的。在处理大量数据统计和判断时,只占用非常小的一部分内存,且计算速度非常高效。 在项目中…

网络工程师:数据库基础知识面试题(八)

84.数据库技术是什么?主流的数据库管理系统软件有哪些? 数据库技术是指用于存储、管理和操作大量结构化数据的技术。它涉及数据库的设计、建模、查询语言、事务处理、数据安全性、性能优化等方面。 主流的数据库管理系统(DBMS)软件有以下几…

貌似起名可以用这个

貌似起名可以用这个 很多变量或者函数起名字都会移除元音字符,可以考虑使用tr的-d参数,如下: $ echo "Hello World, Welcome to Linux!" | tr -d a,o,e,i Hll Wrld Wlcm t Lnux!不过感觉删除的多了,也不一定是好事。。…

《设计模式的艺术》笔记 - 原型模式

介绍 使用原型实例指定创建对象的种类&#xff0c;并且通过克隆这些原型创建新的对象。原型模式是一种对象创建型模式。 实现 myclass.h // // Created by yuwp on 2024/1/12. //#ifndef DESIGNPATTERNS_MYCLASS_H #define DESIGNPATTERNS_MYCLASS_H#include <iostream&g…

Day32- 贪心算法part06

一、单调递增的数字 题目一&#xff1a;738. 单调递增的数字 738. 单调递增的数字 当且仅当每个相邻位数上的数字 x 和 y 满足 x < y 时&#xff0c;我们称这个整数是单调递增的。 给定一个整数 n &#xff0c;返回 小于或等于 n 的最大数字&#xff0c;且数字呈 单调递…

k8s---ingress对外服务(ingress-controller)

ingress 概念 k8s的对外服务&#xff0c;ingress service作用现在两个方面&#xff1a; 1、集群内部&#xff1a;不断跟踪的变化&#xff0c;更新endpoint中的pod对象&#xff0c;基于pod的ip地址不断变化的一种服务发现机制。 2、集群外部&#xff1a;类似于负载均衡器&a…

进阶Docker3:Dokerfile构建镜像

目录 Dockerfile 构建基础镜像 基本机构 命令&#xff1a; 命令解释&#xff1a; 准备工作 创建镜像 上传镜像 Dockerfile Dockerfile 是一个文本格式的配置文件&#xff0c; 用户可以使用 Dockerfile 来快速创建自定义的镜像&#xff0c;另外&#xff0c;使 用Docke…

Docker 安装 MySQ

Docker 安装 MySQL MySQL 是世界上最受欢迎的开源数据库。凭借其可靠性、易用性和性能&#xff0c;MySQL 已成为 Web 应用程序的数据库优先选择。 1、查看可用的 MySQL 版本 访问 MySQL 镜像库地址&#xff1a;https://hub.docker.com/_/mysql?tabtags 。 可以通过 Sort b…

使用docker部署RStudio容器并结合内网穿透实现公网访问

文章目录 前言1. 安装RStudio Server2. 本地访问3. Linux 安装cpolar4. 配置RStudio server公网访问地址5. 公网远程访问RStudio6. 固定RStudio公网地址 前言 RStudio Server 使你能够在 Linux 服务器上运行你所熟悉和喜爱的 RStudio IDE&#xff0c;并通过 Web 浏览器进行访问…

旅游项目day04

1. JWT有效期 封装用户登录对象&#xff0c; 在指定时间过期 2. 有些接口需要登录&#xff1f;有些不需要登录&#xff1f; 后端如何知道a需要登录&#xff0c;b不需要登录&#xff1f; 注解。 3. 目的地 一个区域下面包含多个目的地 数据库表&#xff1a; 1. 区域表 2.…

交互设计:提升用户动机

之前给大家介绍了交互设计的底层模型——最新版福格行为模型。 模型告诉我们想让用户进行某个行为有3个步骤&#xff0c;第一个步骤是检查有没有&#xff08;合理的&#xff09;行为提示&#xff0c;我把它翻译成能否吸引用户注意&#xff0c;感兴趣的同学可以查看《交互设计之…

Linux--进程控制

进程终止 进程终止是指一个正在运行的进程结束其执行并释放占用的系统资源的过程。进程可以通过以下几种方式终止&#xff1a; 正常终止&#xff1a;进程完成了它的任务&#xff0c;或者遇到了终止条件&#xff0c;例如调用了exit()函数或主函数执行完毕。 异常终止&#xff1…

代码随想录刷题题Day36

刷题的第三十六天&#xff0c;希望自己能够不断坚持下去&#xff0c;迎来蜕变。&#x1f600;&#x1f600;&#x1f600; 刷题语言&#xff1a;C Day36 任务 ● 123.买卖股票的最佳时机III ● 188.买卖股票的最佳时机IV 1 买卖股票的最佳时机III 123.买卖股票的最佳时机III …

Maven--pom.xml文件详解

1.pom简介 pom指的是project object model&#xff0c;又叫项目对象模型。Maven的pom文件是一个XML文件&#xff0c;用于描述项目的各种属性、依赖和构建信息&#xff0c;包括项目的名称、版本、许可证、作者、描述、依赖关系、构建过程、插件等。总的来说&#xff0c;POM文件…

计算机网络——数据链路层(1)

一、概述 在计算机网络中&#xff0c;数据链路层承担着点对点通信的任务&#xff0c;用于跨物理层在网段节点之间参数数据。它在网络分层中处于物理层之上&#xff0c;网路层之下。 在链路层的讨论中&#xff0c;我们将看到两种截然不同类型的链路层信道。第一种类型是广播信道…