iis服务器助手广告广告
返回顶部
首页 > 资讯 > 数据库 >MySQL的事务特性概念梳理总结
  • 739
分享到

MySQL的事务特性概念梳理总结

MySQL的事务特性MySQL事务 2022-07-11 10:07:09 739人浏览 八月长安
摘要

目录重温事务的概念为什么用事务、事务是什么怎么用事务事务的四大特性是什么?原子性一致性持久性隔离性重温事务的概念 为什么用事务、事务是什么 我们规定了,做一件事情,只有成功和失败!用个很经典的例子举例:银行转账,A向B转

重温事务的概念

为什么用事务、事务是什么

我们规定了,做一件事情,只有成功和失败!
用个很经典的例子举例:
银行转账,A向B转账十万,能不能发生一遍付钱一边没收钱的情况?
现实中一定是A和B同时成功或者失败,不能出现一边成功另一边失败的情景,这就是事务的简单例子。

那么由这个例子我们想想事务其实是为了保证什么?

假如:

  • 张三问罗老师借钱,借了钱没写借据
  • 这是做了事情,但是没有依据,就算做成功了,也没办法证明。突出借据的重要性(持久性) redolog
  • 张三问罗老师借钱,罗老师同意了,可是张三不想借了

这是事情做成功了,关键点在于,我可不可以反悔。(张三去决定)突出回滚的重要性(原子性)undo log

所以**事务其实就是想要做的事情是一个整体!**事务的存在目的就是为了事情能够正确成功的执行。

如果以数据库的角度去看:

在关系型数据库中,事务其实就是【一组原子性的SQL】或者说一个独立不可分割的工作单元,如果数据库引擎能成功的对数据库引用该组查询的全部语句,那么就执行该组查询,如果其中有任何一条语句因为崩溃或者其他原因无法执行,那么所有的语句都不会执行,也就是说,事务内的语句,要么全部执行成功,要么全部执行失败

那么刚才那个转账的例子,让我们去写一个事务,应该怎么写?

查询A账户的余额是否大于10W块钱从A账户余额中减去10W块钱在B账户余额中增加10W块钱

怎么用事务

还记得怎么写事务的sql语句吗?

--开启一个事务
BEGIN;--等价于 START TRANSACTioN;
--执行我们需要的SQL
--提交事务
COMMIT;
--回滚事务
ROLLBACK;

我们来模拟一下A的两个账户(CMBC银行、ICBC银行)之间转账的事务

# 开启转账事务
BEGIN;
SELECT BALANCE FROM BANK_CMBC WHERE USER_NAME = 'A的CMBC银行账户';
# 这里需要判断余额 是否大于等于 10W
UPDATE BANK_CMBC SET BALANCE = BALANCE - 100000 WHERE USER'A的CMBC银行账户';
UPDATE BANK_ICBC SET BALANCE = BALANCE + 100000 WHERE USER'A的ICBC银行账户';
# 这里当然还需要记录 记录表 日志表 转账记录表 等
SELECT * FROM BANK_CMBC;
SELECT * FROM BANK_ICBC;
--提交
COMMIT;
--或者回滚
ROLLBACK;
# BANK_CMBC 里的余额会减去10W 然后 BANK_ICBC账户增加10W,
# 这个就是我们事务的具体使用场景了,要么全部成功要么全部失败!

我能不能只提交一部分事务,一部分事务不提交呢?
也可以,使用SAVEPOINT,但是呢,要记得提交

BEGIN;
SELECT BALANCE FROM BANK_CMBC WHERE USER_NAME = 'A的CMBC银行账户';
# 这里需要判断余额 是否大于等于 10W
UPDATE BANK_CMBC SET BALANCE = BALANCE - 100000 WHERE USER_NAME ='A的CMBC银行账户';
SAVEPOINT A;--设置回滚点
UPDATE BANK_ICBC SET BALANCE = BALANCE + 100000 WHERE USER_NAME ='A的ICBC银行账户';
# 这里当然还需要记录 记录表 日志表 转账记录表 等
# 回滚到保存点
ROLLBACK TO A;
SELECT * FROM BANK_CMBC;
SELECT * FROM BANK_ICBC;
COMMIT;
# 这个时候我们的记录是多少?
# 我们看一下 在SAVEPOINT 之前的语句都能正确提交,SAVEPOINT之后的语句因为我们手动回滚了他们是没有被更改成的,这
# 就是SAVEPOINT的作用,他能够在一个事务里开启一个嵌套事务。主事务和嵌套事务属于同一个事务,嵌套事务出错回滚不会影响主事务,主事务回滚会将嵌套事务一起回滚。主事务提交嵌套事务也会跟着提交。

问一个面试官可能会问到的问题,我们知道多条SQL语句开启的时候,能保证全部成功、或者全部失败。那么单条SQL语句有没有事务呢
其实每个语句都是原子性的,他们被隐式的加入了 BEGIN; START TRANSACTION 开启事务,并COMMIT;
就好像:

BEGIN;
UPDATE BANK CMBC SET BALANCE = BALANCE + 100000 WHERE USER_NAME = 'A的CMBC银行账户';
COMMIT;
# 如果在语句执行期间发生错误,则会回滚该语句。
# 但是如果每个语句都这么写,挺麻烦的。所以在事务里有一个概念叫做自动提交设置!
# 我们每个单语句都会自动提交的,可以自行关闭自动提交!默认是开启的,这个也区别于全局global和会话session
show session VARIABLES like 'autocommit'; --查询自动开启提交
show global variables like 'autocommit'; --查询自动开启提交
set SESSION autocommit=0; --关闭自动提交

总结:数据库的事务都是为了解决这种业务场景出现的一门技术,为了保证多个SQL语句,要么全部执行成功,要么全部执行失败。

事务的四大特性是什么?

原子性

一个事务必须被视为一个不可分割的最小单元,整个事务中的操作要么全部提交成功,要么全部失败回滚,对于一个事务来说,不可能只执行其中的一部分操作。

一致性

数据库总是由一个一致性状态转换到另外一个一致性状态。在前面的例子中,一致性确保了,即使在执行第三条第四条预计之间系统崩溃了,CMBC账户中也不会损失10W,要不然A要哭死,如果是系统崩溃最终事务没有提交,所有事务中所作的修改也不会保存到数据库中。

持久性

俗话说就是保证及时落盘;
持久性是为了保证断点等异常的情况,还能保证我们commit的数据不丢失并且不会回滚
不会出现我commit之后,重启后又被回滚了!

刚才写了有个undolog能保证原子性,同样的,也有个redolog(重做日志)去保证特殊情况的数据丢失!
redolog会记录每次事务的执行语句!当发生断电等比较不可控的因素后,能根据redolog进行数据恢复!!!

隔离性

一个事务所作的修改在最终提交之前,对其他事务是不可见的。在前面的例子中,我们执行完第三条语句,第四条语句还没成功执行的时候,事务尚未提交。这个时候去看我们ACMBC中的账号还有10W,如果这个时候去取钱是不可以的,要等待事务提交了才可以。

刚才我们所看到的,是不是都是一个人或者说是一个线程的问题?
假如我们有很高的并发量,如果有多个事务同时操作同一条数据,会导致什么?
事务因并发出现的问题有哪些?可以查看另一篇文章
链接: 

到此这篇关于Mysql的事务特性概念梳理总结的文章就介绍到这了,更多相关mysql事务内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

您可能感兴趣的文档:

--结束END--

本文标题: MySQL的事务特性概念梳理总结

本文链接: https://www.lsjlt.com/news/33298.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Spring事务失效的场景梳理总结
    目录概述事务的传播类型事务隔离级别事务失效的场景概述 Spring针对Java Transaction API (JTA)、JDBC、Hibernate和Java Persisten...
    99+
    2023-02-23
    Spring事务失效场景 Spring事务失效原因
  • MySQL事务的基本概念解析
    MySQL事务的基本概念解析 MySQL是一种常用的关系型数据库管理系统,支持事务处理。事务是数据库操作的基本单位,通过事务可以保证一系列操作的原子性、一致性、隔离性和持久性。本文将详...
    99+
    2024-03-01
    mysql 事务 概念
  • 理解PHP trait DTO的核心概念与特性
    概念与背景在 PHP 编程语言中,Trait 是一种代码复用机制,它允许开发者在不使用多重继承的情况下,将方法的集合组合到一个类中。Trait DTO 则是其中的一种应用场景。DTO(Data Transfer Object)是一种常见的设...
    99+
    2023-10-21
    dto 核心概念 PHP trait
  • MYSQL事务以及隔离级的概念
    这篇文章主要介绍“MYSQL事务以及隔离级的概念”,在日常操作中,相信很多人在MYSQL事务以及隔离级的概念问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”MYSQL事务以及隔...
    99+
    2024-04-02
  • 梳理数百个问题后,我总结出10个数据科学面试必掌握概念……
    这篇文章主要介绍“梳理数百个问题后,我总结出10个数据科学面试必掌握概念……”,在日常操作中,相信很多人在梳理数百个问题后,我总结出10个数据科学面试必掌握概念……问题上存在疑惑,小编查阅了各式资料,整理出...
    99+
    2024-04-02
  • PHP操作MySQL的常用代码段梳理与总结
    这篇文章为大家介绍,实用的PHP网站实际开发中常用到的操作mysql数据库的代码段,所有代码均可靠执行,此文将持续更新!!! 1、向数据库插入数据表 <?php ...
    99+
    2024-04-02
  • Linux | PCIe Hotplug | 概念及工作原理的不完全总结
    本文对 PCIe 热插拔的概念及工作原理进行不完全总结。 更新: 2022 / 12 / 31 Linux | PCIe Hotplug | 概念及工作原理的不完全总结 热插拔组成部件实现代...
    99+
    2023-09-22
    linux 服务器 运维
  • 【mysql】事务的四种特性的理解
    🌇个人主页:平凡的小苏 📚学习格言:命运给你一个低的起点,是想看你精彩的翻盘,而不是让你自甘堕落,脚下的路虽然难走,但我还能走,比起向阳而生,我更想尝试逆风翻盘。 🛸Mysql专栏:Mys...
    99+
    2023-08-18
    mysql 数据库
  • MySQL事务的概念以及事务隔离级别介绍
    本篇内容主要讲解“MySQL事务的概念以及事务隔离级别介绍”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“MySQL事务的概念以及事务隔离级别介绍”吧!先简单介绍...
    99+
    2024-04-02
  • 【MySQL系列】MySQL的事务管理的学习(一)_ 事务概念 | 事务操作方式 | 事务隔离级别
    「前言」文章内容大致是MySQL事务管理。 「归属专栏」MySQL 「主页链接」个人主页 「笔者」枫叶先生(fy) 目录 一、事务概念二、事务的版本支持三、事务提交方式四、事务常...
    99+
    2023-09-09
    mysql 学习 adb
  • Spring中事务的传播属性总结
    本篇内容主要讲解“Spring中事务的传播属性总结”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Spring中事务的传播属性总结”吧!我们用Spring时,很多时候都会用到他的声明式事务,简单的...
    99+
    2023-06-03
  • MySQL事务的定义与特性
    MySQL事务的定义与特性 MySQL是一个开源的关系型数据库管理系统,事务是数据库管理系统中一个非常重要的概念。事务是指一组SQL语句的执行,这些SQL语句要么全部执行,要么全部不执...
    99+
    2024-03-01
    mysql 特性 事务 sql语句
  • mysql事务的特性有哪些
    MySQL事务具有以下特性:1. 原子性(Atomicity):事务是一个原子操作,要么全部执行成功,要么全部执行失败,不存在部分执...
    99+
    2023-08-18
    mysql
  • mysql事务特性的实现原理是什么
    MySQL事务特性的实现原理是通过使用日志和锁机制来保证事务的原子性、一致性、隔离性和持久性。1. 原子性:MySQL使用redo日...
    99+
    2023-10-12
    mysql
  • 深入理解MySQL连接数的概念及重要性
    MySQL作为一种常用的关系型数据库管理系统,在Web开发领域中被广泛应用。在使用MySQL时,一个重要的概念就是连接数。本文将深入探讨MySQL连接数的概念及其重要性,并结合具体的代...
    99+
    2024-04-02
  • MySQL事务与锁的知识点总结
    这篇文章主要介绍“MySQL事务与锁的知识点总结”,在日常操作中,相信很多人在MySQL事务与锁的知识点总结问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”MySQL事务与锁的...
    99+
    2024-04-02
  • mysql spring事务的特性是什么
    本篇内容主要讲解“mysql spring事务的特性是什么”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“mysql spring事务的特性是什么”吧!说明支持原数据库事务的隔离级别,加入事务传播...
    99+
    2023-06-20
  • MySQL中事务的特性是什么
    MySQL中事务的特性有:原子性,是指事务要么全部被执行,要么就全部不被执行。一致性,是指事务必须使数据库从一个状态变换成另一个状态,必须处于一致性状态。隔离性,是指多个用户并发访问数据库时,多个并发事务之间要相互隔离。持久性,是指一个事务...
    99+
    2024-04-02
  • MySQL事务之ACID特性的实现原理是什么
    小编给大家分享一下MySQL事务之ACID特性的实现原理是什么,希望大家阅读完这篇文章后大所收获,下面让我们一起去探讨吧!事务是MySQL等关系型数据库区别于NoSQL的重要方面,是保证数据一致性的重要手段...
    99+
    2024-04-02
  • MySQL中的事务特性和实现原理是什么
    这篇“MySQL中的事务特性和实现原理是什么”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“...
    99+
    2023-02-13
    mysql
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作