广告
返回顶部
首页 > 资讯 > 数据库 >MySQL中的事务基础
  • 110
分享到

MySQL中的事务基础

mysql数据库事务事务隔离级别原力计划 2023-09-06 05:09:05 110人浏览 八月长安
摘要

文章目录 事务的ACID特性事务的隔离级别数据并发问题事务的隔离级别 事务的ACID特性 Mysql中的事务指的是在数据库操作中,将一组sql语句作为一个不可分割的执行单元进行处理的机

文章目录

事务的ACID特性

Mysql中的事务指的是在数据库操作中,将一组sql语句作为一个不可分割的执行单元进行处理的机制。事务具有原子性、一致性、隔离性和持久性的特性(ACID特性)。

  1. 原子性(Atomicity):事务中的所有操作要么全部成功执行,要么全部失败回滚。如果事务执行过程中发生错误或中断,系统会撤销已经执行的操作,将数据恢复到事务开始前的状态。

  2. 一致性(Consistency):事务操作前后,数据库必须保持一致性状态。这意味着事务的执行不会破坏数据库的完整性约束,例如唯一性约束、外键约束等。

  3. 隔离性(Isolation):多个事务并发执行时,每个事务的执行应该与其他事务的执行相互隔离,使得每个事务感觉自己在独立地操作数据。这样可以防止并发事务之间的数据干扰和不一致的读取问题。

  4. 持久性(Durability):一旦事务提交,其所做的修改将永久保存在数据库中,即使发生系统故障或数据库崩溃等情况,数据也不会丢失。

要使用事务,首先需要以开始事务的方式将一组相关的SQL语句括起来,通常使用START TRANSACTIONBEGINBEGIN WORK语句来开始一个事务。然后,在执行期间,可以执行插入、更新、删除等操作。最后,通过执行COMMIT将事务的结果提交给数据库,或者通过执行ROLLBACK来撤销事务中的所有操作。

START TRANSACTION;INSERT INTO table1 (column1, column2) VALUES ('value1', 'value2');UPDATE table2 SET column3 = 'value3' WHERE column4 = 'value4';COMMIT;

通过START TRANSACTION开始了一个事务,然后执行了一系列的插入和更新操作,最后通过COMMIT提交事务,使得这些操作永久生效。如果在事务执行过程中发生错误,可以使用ROLLBACK回滚事务,撤销之前的操作,使得数据库恢复到事务开始前的状态。

事务提供了一种强大的机制,用于处理复杂的数据库操作,并确保数据的一致性和完整性。

事务的隔离级别

数据并发问题

  1. 脏写( Dirty Write )
    对于两个事务 Session A、Session B,如果事务Session A 修改了另一个未提交事务Session B 修改过的数
    据,那就意味着发生了脏写

  2. 脏读( Dirty Read )
    对于两个事务 Session A、Session B,Session A 读取了已经被 Session B 更新但还没有被提交的字段。
    之后若 Session B 回滚,Session A 读取的内容就是临时且无效的。
    Session A和Session B各开启了一个事务,Session B中的事务先将studentno列为1的记录的name列更新
    为’张三’,然后Session A中的事务再去查询这条studentno为1的记录,如果读到列name的值为’张三’,而
    Session B中的事务稍后进行了回滚,那么Session A中的事务相当于读到了一个不存在的数据,这种现象
    就称之为脏读。

  3. 不可重复读( Non-Repeatable Read )
    对于两个事务Session A、Session B,Session A 读取了一个字段,然后 Session B 更新了该字段。 之后
    Session A 再次读取同一个字段, 值就不同了。那就意味着发生了不可重复读。
    我们在Session B中提交了几个隐式事务(注意是隐式事务,意味着语句结束事务就提交了),这些事务
    都修改了studentno列为1的记录的列name的值,每次事务提交之后,如果Session A中的事务都可以查看
    到最新的值,这种现象也被称之为不可重复读。

  4. 幻读( Phantom )
    对于两个事务Session A、Session B, Session A 从一个表中读取了一个字段, 然后 Session B 在该表中插
    入了一些新的行。 之后, 如果 Session A 再次读取同一个表, 就会多出几行。那就意味着发生了幻读。
    Session A中的事务先根据条件 studentno > 0这个条件查询表student,得到了name列值为’张三’的记录;
    之后Session B中提交了一个隐式事务,该事务向表student中插入了一条新记录;之后Session A中的事务
    再根据相同的条件 studentno > 0查询表student,得到的结果集中包含Session B中的事务新插入的那条记
    录,这种现象也被称之为幻读。我们把新插入的那些记录称之为幻影记录。

事务的隔离级别

事务的隔离级别是指多个并发事务之间相互隔离的程度,它定义了一个事务对于另一个事务的可见性和影响。

mysql中,有四种标准的隔离级别,每种级别都有不同的特性和性能开销。可以使用以下命令设置隔离级别:

SET TRANSACTION ISOLATION LEVEL <isolation_level>;

以下是MySQL支持的四种隔离级别:

  1. 读未提交(Read Uncommitted):最低的隔离级别。一个事务可以读取另一个事务尚未提交的未提交数据,可能导致脏读(Dirty Read)的问题。该级别具有最好的并发性能,但最低的数据一致性。

  2. 读已提交(Read Committed):默认的隔离级别。一个事务只能读取另一个事务已经提交的数据,避免了脏读问题。但是可能会遇到不可重复读(Non-repeatable Read)和幻读(Phantom Read)问题。

  3. 可重复读(Repeatable Read):在一个事务执行期间,同样的查询将始终返回相同的结果集。这种级别避免了脏读和不可重复读问题,但是可能会遇到幻读问题。MySQL的默认隔离级别是可重复读。

  4. 串行化(Serializable):最高的隔离级别。每个事务依次执行,避免了脏读、不可重复读和幻读的问题。但是串行化级别的并发性能最差,因为它阻止了并发访问。

隔离级别的选择需要根据具体的业务需求和并发性能要求进行权衡。较低的隔离级别具有更好的性能,但可能导致数据不一致的问题;而较高的隔离级别可以提供更强的数据一致性,但可能会降低并发性能。

需要注意的是,更高的隔离级别通常伴随着更大的开销和资源竞争,可能导致死锁的发生。因此,在选择隔离级别时,需要综合考虑业务需求、数据一致性要求和系统性能等因素。

来源地址:https://blog.csdn.net/weixin_43598687/article/details/131429595

您可能感兴趣的文档:

--结束END--

本文标题: MySQL中的事务基础

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

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

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

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

下载Word文档
猜你喜欢
  • MySQL中的事务基础
    文章目录 事务的ACID特性事务的隔离级别数据并发问题事务的隔离级别 事务的ACID特性 MySQL中的事务指的是在数据库操作中,将一组SQL语句作为一个不可分割的执行单元进行处理的机...
    99+
    2023-09-06
    mysql 数据库 事务 事务隔离级别 原力计划
  • mysql基础(六)mysql事务
    mysql事务:是一个独立的工作单元 事务必须通过ACID测试:     原子性(Atomicity):一个事务的所有操作要么全部成功执行,要么全部失败后回滚 &n...
    99+
    2022-10-18
  • MySQL基础——事务隔离级别
    事务是DBMS得执行单位。它由有限得数据库操作序列组成得。但不是任意得数据库操作序列都能成为事务。一般来说,事务是必须满足4个条件(ACID) ①:原子性(Autmic):事务在执行性,要做到“要...
    99+
    2022-10-18
  • mysql 基础 事件(定时任务)
    一、普通事件:直接执行语句: DROP EVENT IF EXISTS job_insertgood; DELIMITER $$ CREATE EVENT job_insertgood ON SCHEDU...
    99+
    2022-10-18
  • MySQL基础入门教程之事务
    目录引言1、事务操作1.1 未控制事务1.2 控制事务一1.3 控制事务二2、事务的四大特性3、并发事务问题4、事务隔离级别总结引言 事务是一组操作的集合,它是一个不可分割的工作单位...
    99+
    2022-11-13
  • 一些关于MySQL事务的基础知识
    下面讲讲关于MySQL事务的基础知识,文字的奥妙在于贴近主题相关。所以,闲话就不谈了,我们直接看下文吧,相信看完MySQL事务的基础知识这篇文章你一定会有所受益。 1、事务的基本语法<!--...
    99+
    2022-10-18
  • 【MySQL基础教程】事务详细介绍
    前言 本文为 【MySQL基础教程】事务 相关知识,下边将对事务简介,事务操作(包括:未控制事务,控制事务),事务四大特性,并发事务问题,事务隔离级别等进行详尽介绍~ 📌博主主页:小...
    99+
    2023-09-04
    mysql java 数据库
  • MySQL基础教程之事务异常情况
    目录测试异常情况控制事务一查看/设置事务提交方式提交事务回滚事务注意:控制事务二开启事务提交事务回滚事务转账案例:事务四大特性补充:mysql 事务并发处理的三种异常总结测试异常情况 -- 1. 查询张三余额 selec...
    99+
    2022-10-29
  • MySQL事务的基础学习以及心得分享
    这篇文章主要介绍了MySQL事务的基础学习以及心得分享,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。事务是逻辑上的一组操作,组成这组操作的各...
    99+
    2022-10-18
  • 数据库基础-事务篇
    1、事务是什么              事务是应用程序中一系列严密的操作,所有操作必须成功完成,否则在每个操作中所作的所有更改都会被撤消。也就是事务具有原子性,一个事务中的一系列的操作要么全部成功,要么一个都不做。 2、事务的四大特性...
    99+
    2016-09-22
    数据库基础-事务篇
  • MySQL— 基础语法大全及操作演示!!!(事务)
    MySQL—— 基础语法大全及操作演示(事务) 六、事务6.1 事务简介6.2 事务操作6.2.1 未控制事务6.2.2 控制事务一6.2.3 控制事务二 6.3 事务四大特...
    99+
    2023-09-02
    mysql android 数据库
  • 如何分析MySQL基础中的触发器和事件
    本篇文章给大家分享的是有关如何分析MySQL基础中的触发器和事件,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。触发器我们使用MySQL的过程中...
    99+
    2022-10-19
  • MySQL的基础(一)
    MySQL的基础(一) SQLSQL的语法特点主要包括以下几点:一、 SQL - DDL -- 数据定义语言1.1 数据库操作1.1 显示现有的数据库1.2 创建数据库1.3 删除数据库1.4...
    99+
    2023-10-25
    mysql oracle 数据库 1024程序员节
  • MySQL的基础分部
    MySQL的基本操作 #进入数据库 mysql -h localhost -uroot -p #展示所有的数据库 show databases #进入某一个数据库 use database_name #...
    99+
    2022-10-18
  • MySQL基础篇(06):事务管理,锁机制案例详解
    本文源码:GitHub·点这里 || GitEE·点这里 一、锁概念简介 1、基础描述 锁机制核心功能是用来协调多个会话中多线程并发访问相同资源时,资源的占用问题。锁机制是一个非常大的模块,贯彻MySQL的几大核心难点模块:索引,...
    99+
    2018-06-26
    MySQL基础篇(06):事务管理,锁机制案例详解
  • Spring事务管理零基础入门
    目录一、简介二、特性(一原持久隔离)2.1 原子性2.2 一致性(类似能量守恒)2.3 隔离性2.4 持久性三、隔离级别3.1 事务级别(从低到高)3.2 常用数据库默认级别:3.3...
    99+
    2022-11-13
  • MySQL 中外键的基础知识?
    外键是一种约束类型,可用于维护表之间的完整性。如果我们为一个表创建外键,那么该表称为子表,而第二个表称为父表。 在父表中,外键将充当主键。让我们创建一个表。 创建子表。 mysql> create table StudentEnro...
    99+
    2023-10-22
  • MySql的回顾一:基础
        周末的时光是短暂,也是轻松愉快的,在这炎炎的夏日坐在小板凳上,吹着空调喝着茶的我带你点轻轻的点开我的文章链接,带领屏幕前的你回顾一下MySql的内容,希望你能有所收获。本篇随笔分上下两部分,上半部分理论,下半部分实际操作。...
    99+
    2019-10-15
    MySql的回顾一:基础
  • MySQL——MySQL的基础操作部分
    使用命令行登录 mysql -u root -p 直接敲击回车后输入密码即可: 当看到出现“mysql>“的符号之后,就表示已经进入到了MySQL系统中,就可以输入MySQL的命令对数据库进行操作了。 查看数据库 使用命令查看所有的数据库...
    99+
    2023-09-08
    mysql pycharm
  • MySQL中的基础知识有哪些
    小编给大家分享一下MySQL中的基础知识有哪些,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!MySQL基础启动MySQL   net start mysql关闭MySQL &nb...
    99+
    2022-10-18
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作