MySQL中的事务基础

这篇具有很好参考价值的文章主要介绍了MySQL中的事务基础。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

事务的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://www.toymoban.com/news/detail-667731.html

到了这里,关于MySQL中的事务基础的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【Mysql数据库 第13章】MySQL的事务、事务的隔离级别、事务的保存点

    💖Spring中的创建对象的三种方式、第三方资源配置管理详细描述及使用(XML版完结篇) 💖Spring中的bean的配置、作用范围、生命周期详细描述及使用(XML版上篇) 💖

    2023年04月20日
    浏览(57)
  • 零基础学MySQL(五)-- 详细讲解数据库中的常用函数

    提供 student 表 1️⃣count 函数 count 表示返回行的总数 (1)基本语法 (2)基本练习 统计一个班级共有多少学生? 统计数学成绩大于 90 的学生有多少个? 统计总分大于 250 的人数有多少? (3)注意细节 count(*) 和 count(列) 的区别: count(*) 返回满足条件的记录的行数 count(列

    2024年01月19日
    浏览(60)
  • MySQL笔记(一):设计范式、基础概念、数据库定义语言DDL

    MySQL是一种数据库管理系统 (DBMS),是基于客户机-服务器的数据库; 分为两个不同的部分, 服务器软件(MySQL DBMS)是负责所有数据访问和处理的一个文件,这个软件运行在称为数据库服务器的计算机上,与数据文件打交道; 客户机则是与用户打交道的软件,对于用户提出的

    2024年02月03日
    浏览(63)
  • 【面试】MySQL事务的12连问

    金三银四马上就要来啦,准备了事务的12连问,相信大家看完肯定会有帮助的。 事务,由一个有限的数据库操作序列构成,这些操作要么全部执行,要么全部不执行,是一个不可分割的工作单位。 假如A转账给B 100 元,先从A的账户里扣除 100 元,再在 B 的账户上加上 100 元。如

    2024年02月01日
    浏览(71)
  • MySQL数据库--事务

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

    2024年02月11日
    浏览(45)
  • 【MySQL数据库】事务

    事务是一种机制、一个操作序列,包含了一组数据库操作命令,并且把所有的命令作为一个整体,一起向系统提交或撤销操作请求,即这一组数据库命令要么都执行,要么都不执行。 事务是一个不可分割的工作逻辑单元。在数据库系统上执行并发操作时,事务是最小的控制单

    2024年02月09日
    浏览(42)
  • mysql数据库之事务

    总的来说,事务 就是一种机制,包含了一组操作命令,会作为一个不可分割的整体,要么都执行,要么都不执行 ,它保证了数据库的安全可靠性 是一种机制、一个操作序列,包含了一组数据库操作命令,并且把所有的命令作为一个整体一起向系统提交或撤销操作请求,即这

    2024年02月09日
    浏览(46)
  • MYSQL篇--事务机制高频面试题

    事务是一个不可分割的数据库操作序列,也是数据库并发控制的基本单位,其执行的结果必须使数据库从一种一致性状态变到另一种一致性状态。事务是逻辑上的一组操作,要么都执行,要么都不执行。 事务最经典也经常被拿出来说例子就是转账了。 假如小明要给小红转账

    2024年01月25日
    浏览(32)
  • 简单认识MySQL数据库事务

    MySQL 事务主要用于处理操作量大,复杂度高的数据。比如说,在战舰登录系统中, 要删除一艘战舰,即需要删除战舰的基本资料,又需要删除和该战舰相关的信息,如舰长, 登记船员等等。这样,这些数据库操作语句就构成一个事务! ●事务是一种机制、一个操作序列,包

    2024年02月16日
    浏览(44)
  • 【MySQL数据库 | 第十五篇】事务

        目录    前言:  介绍事务:  控制事务:  事务四大特性:  并发事务问题:  事务隔离级别: 总结:   这章我们将进入到MySQL基础篇的最后一章:事务,希望大家可以坚持下去,跟着我一起走完MySQL的学习之旅。 MySQL是一种关系型数据库管理系统,支持事务管理。 事

    2024年02月08日
    浏览(57)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包