MySQL 事务笔记

MySQL 事务笔记

目录

  • 事务简介
  • 事务操作
  • 事务四大特性
  • 并发事务问题
  • 事务隔离级别
  • 总结

事务简介

事务(Transaction)是数据库操作的逻辑单元,由一组不可分割的SQL操作组成。主要用于保证:

  • 多个操作的原子性(要么全部成功,要么全部失败)
  • 维护数据一致性(例如:转账操作)

事务操作

-- 1. 开启事务
START TRANSACTION;  -- 或 BEGIN;-- 2. 执行SQL操作
UPDATE account SET balance = balance - 100 WHERE id = 1;
UPDATE account SET balance = balance + 100 WHERE id = 2;-- 3. 提交事务(确认执行)
COMMIT;-- 4. 回滚事务(撤销操作)
ROLLBACK;-- 5. 保存点(部分回滚)
SAVEPOINT point1;
ROLLBACK TO point1;

(面试题)事务四大特性(ACID)

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

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

(数据之和无论是否出现异常都不会改变)

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

(AB并发运行时,A事务运行不会影响B事务的运行,B事务运行也同样不会影响A事务的运行,相当于二者都是在独立的环境下运行。)

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

(无论事务是回滚还是提交,最后数据都会存储在磁盘里,所以它对数据库中的数据的改变就是永久的。 )

上述就是事务的四大特性,简称ACID。

特性描述实现机制
原子性事务是不可分割的最小单元Undo Log
一致性事务前后数据满足完整性约束应用层 + 数据库约束
隔离性并发事务互不干扰锁机制 + MVCC
持久性事务提交后永久生效Redo Log

并发事务问题

A,B是一对并发事务。
请添加图片描述

1). 赃读:一个事务读到另外一个事务还没有提交的数据。
在这里插入图片描述
假设有一个事务A,事务A要进行三个操作,然后他要一个一个的执行,第一个操作执行完了,再去执行第二个操作。假如说第一个操作执行的是select语句,第二个操作是执行update语句,注意事务没有完成的时候,事务是没有提交的,只有这个事务当中的操作完成之后,事务才会提交。那么此时我们再来看,事务A执行了第二步之后,他会把数据库中的表进行更新,那此时又有另外一个事务B,事务B他要进行的就是一个id=1查询操作,而此时刚好事务A对id为1的数据进行了更新,那么此时B事务就会把A更新后的事务拿到了,而此时A事务提交了吗?没有。(所以一个事务读到另外一个事务还没有提交的数据就称为脏读。)

区别点:B还没提交就读到了

2). 不可重复读:一个事务先后读取同一条记录,但两次读取的数据不同,称之为不可重复读。
在这里插入图片描述
首先事务A有4步操作,首先第一步先去执行一个select id=1的语句,然后这时候B事务执行了一个update id=1的语句,并且提交了事务,此时A事务继续执行第三步,第三步又是一个查询语句且和第一条查询语句一模一样,那此时我们会发现第一次查询和第三次查询的结果确实不一样的,因为事务B执行了更新操作并且提交了。

事务A两次读取同一条记录,但是读取到的数据却是不一样的。

区别点:B提交之后A读到了,但是一次事务里两次同样的查询结果却不一致。

3). 幻读:一个事务按照条件查询数据时,没有对应的数据行,但是在插入数据时,又发现这行数据 已经存在,好像出现了 “幻影”。
在这里插入图片描述
事务A首先进行了一次id为1的查询操作,没有查到。然后这个时候事务B执行了插入操作,还没有提交。事务A接着执行插入操作,结果发现这个主键已经被占用了无法插入(主键冲突),转而去执行第三次查询id=1的数据的操作,因为此时事务B还没又提交,结果又发现数据库没有这条数据。(这种一个事务按照条件查询数据时,没有对应的数据行,但是在插入数据时,又发现这行数据 已经存在,好像出现了 "幻影"的现象,称为幻读。)

问题类型现象描述示例场景
脏读读到其他事务未提交的数据事务A读到事务B修改后未提交的数据,B回滚后数据无效
不可重复读同一事务内多次读取结果不同事务A两次查询期间,事务B修改了数据并提交
幻读同一事务内多次查询返回不同行数事务A查询时事务B插入/删除了符合条件的数据
丢失更新后提交覆盖先提交的修改事务A和B同时修改同一数据,后提交的覆盖了先提交的结果

事务隔离级别(解决并发事务问题)

MySQL默认隔离级别:Repeatable READ

✅:会出现这种并发事务问题

❌:不会出现这种并发事务问题

tip:可以使用命令行模拟脏读 ,不可重复读 ,幻读现象。

隔离级别脏读不可重复读幻读性能使用场景
READ uncommited(读未提交)最高极少使用
READ commited(读已提交)较高Oracle默认
Repeatable READ(可重复读)中等MySQL默认
Serializable(串行化)最低严格数据一致性

设置隔离级别:

-- 查看当前隔离级别
SELECT @@transaction_isolation;-- 设置会话级隔离级别
SET SESSION TRANSACTION ISOLATION LEVEL (READ COMMITTED);--注意:事务隔离级别越高,数据越安全,但是性能越低。 

总结

  1. 事务简介

    事务是一组操作的集合,这组操作,要么全部执行成功,要么全部执行失败。

  2. 事务操作

    START TRANSACTION;–开启事务
    COMMIT/ROLLBACK;–提交/回滚事务

  3. 事务四大特性

    原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)、持久性(Durability )

  4. 并发事务问题

    赃读、不可重复读、幻读

  5. 事务隔离级别

    READ UNCOMMITTED、READ COMMITTED、REPEATABLE READ、SERIALIZABLE

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

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

相关文章

GPT1 与 GPT2 的异同

1.什么是GPT1: GPT1介绍了一种通过生成式预训练(Generative Pre-Training)来提升语言理解能力的方法。这种方法首先在一个大型的未标注文本语料库上进行语言模型的预训练,然后针对具体的任务进行判别式微调(discrimin…

Android Audio其他——数字音频接口(附)

数字音频接口 DAI,即 Digital Audio Interfaces,顾名思义,DAI 表示在板级或板间传输数字音频信号的方式。相比于模拟接口,数字音频接口抗干扰能力更强,硬件设计简单,DAI 在音频电路设计中得到越来越广泛的应用。 一、音频链路 1、模拟音频信号 可以看到在传统的…

kafka-leader -1问题解决

一. 问题: 在 Kafka 中,leader -1 通常表示分区的领导者副本尚未被选举出来,或者在获取领导者信息时出现了问题。以下是可能导致出现 kafka leader -1 的一些常见原因及相关分析: 1. 副本同步问题: 在 Kafka 集群中&…

DeepSeek基础之机器学习

文章目录 一、核心概念总结(一)机器学习基本定义(二)基本术语(三)假设空间(四)归纳偏好(五)“没有免费的午餐”定理(NFL 定理) 二、重…

【jira】用到几张表

jira用到的几张表 测试计划,测试周期,测试用例,问题记录 1. 测试计划 # 记录表,查计划详情 SELECT ID,issuenum,SUMMARY FROM jiraissue where issuenum 22871# 测试计划下,测试周期,查测试周期id&…

Mysql 死锁场景及解决方案

一、常见死锁场景 1. 不同顺序的锁获取 场景:事务A按顺序更新 行1 → 行2,事务B按 行2 → 行1 顺序更新。 原因:双方各持有一把锁,同时请求对方持有的锁,形成循环等待。 2. 索引缺失导致锁升级 场景:更…

Spring Boot从入门到精通:一站式掌握企业级开发

前言 Spring Boot作为Java领域最流行的微服务框架,凭借其约定优于配置的理念和快速启动的特性,极大简化了Spring应用的初始搭建和开发过程。本文将带你从零开始系统学习Spring Boot,最终实现精通级应用开发,涵盖核心原理、实战技…

【Go】十六、protobuf构建基础服务信息、grpc服务启动的基础信息

商品服务 服务结构 创建 goods 服务,将之前 user 服务的基本结构迁移到 goods 服务上,完整目录是: mxshop_srvs user_srv … tmp … goods_srv config config.go 配置的读取表 global global.go 数据库、日志初始化、全局变量定义 handler …

Redis 持久化方式:RDB(Redis Database)和 AOF(Append Only File)

本部分内容是关于博主在学习 Redis 时关于持久化部分的记录,介绍了 RDB 和 AOF 两种持久化方式,详细介绍了持久化的原理、配置、使用方式、优缺点和使用场景。并对两种持久化方式做了对比。文章最后介绍了 Redis 持久化的意义并与其他常见的缓存技术做了…

Linux中lshw相关的命令

​ lshw(List Hardware)是一个在 Linux 系统中用于显示硬件详细信息的强大工具。以下是一些常见的 lshw 相关命令及其用法: 1. 安装 lshw 在使用 lshw 之前,你可能需要先安装它。不同的 Linux 发行版安装方式有所不同&#xff1…

爬虫第九篇-结束爬虫循环

最近在学习Python爬虫的过程中,遇到了一个很有趣的问题:如何优雅地结束爬虫循环?今天,我想和大家分享一下我的发现和心得。 一、爬虫循环结束的常见问题 在写爬虫时,我们经常会遇到这样的情况:当爬取到的…

Vue3状态管理新选择:Pinia使用完全指南

一、为什么需要状态管理? 在Vue应用开发中,当我们的组件树变得复杂时,组件间的数据传递会成为棘手的问题。传统方案(如props/$emit)在多层嵌套组件中会变得笨拙,这时状态管理工具应运而生。Vue3带来了全新…

一文掌握模拟登录的基本原理和实战

文章目录 1. 模拟登录的基本原理1.1 登录流程1.2 关键技术2. 模拟登录的实战步骤2.1 分析登录页面2.2 使用 Requests 实现模拟登录2.3 处理验证码2.4 使用 Selenium 实现模拟登录3. 实战案例:模拟登录豆瓣3.1 分析豆瓣登录页面3.2 实现代码4. 注意事项5. 总结模拟登录是爬虫开…

推荐算法工程师的技术图谱和学习路径

推荐算法工程师的技术图谱和学习路径可以从多个维度进行概述,可以总结如下: 一、技术图谱 推荐算法工程师需要掌握的技术栈主要分为以下几个方面: 数学基础: 微积分、线性代数、概率论与统计学是推荐算法的基础,用于理解模型的数学原理和优化算法。高等数学、最优化理论…

ONNX转RKNN的环境搭建

将ONNX模型转换为RKNN模型的过程记录 工具准备 rknn-toolkit:https://github.com/rockchip-linux/rknn-toolkit rknn-toolkit2:https://github.com/airockchip/rknn-toolkit2 rknn_model_zoo:https://github.com/airockchip/rknn_model_zoo ultralytics_yolov8:https://github…

华为认证考试证书下载步骤(纸质+电子版)

华为考试证书可以通过官方渠道下载相应的电子证书,部分高级认证如HCIE还支持申请纸质证书。 一、华为电子版证书申请步骤如下: ①访问华为培训与认证网站 打开浏览器,登录华为培训与认证官方网站 ②登录个人账号 在网站首页,点…

面试八股文--数据库基础知识总结(2) MySQL

本文介绍关于MySQL的相关面试知识 一、关系型数据库 1、定义 关系型数据库(Relational Database)是一种基于关系模型的数据库管理系统(DBMS),它将数据存储在表格(表)中,并通过表格…

介绍下pdf打印工具类 JasperPrint

JasperPrint 工具类深度解析 JasperPrint 是 JasperReports 框架中实现 PDF 打印的核心载体类,其本质是 填充数据后的可打印报表对象,承担着从模板编译、数据填充到格式输出的全流程控制。以下从 7 个维度展开深度解析: 一、核心定位与生命周…

LVS+Keepalived 高可用集群搭建

一、高可用集群: 1.什么是高可用集群: 高可用集群(High Availability Cluster)是以减少服务中断时间为目地的服务器集群技术它通过保护用户的业务程序对外不间断提供的服务,把因软件、硬件、人为造成的故障对业务的影响…

从【人工智能】到【计算机视觉】,【深度学习】引领的未来科技创新与变革

前几天偶然发现了一个超棒的人工智能学习网站,内容通俗易懂,讲解风趣幽默,简直让人欲罢不能。忍不住分享给大家,点击这里立刻跳转,开启你的AI学习之旅吧! 前言 – 人工智能教程https://www.captainbed.cn/l…