MySQL-事务Transaction详解-事务概述

时间:2024-10-22 15:23:48

事务基本概念

  1. 事务是最小的一个工作单元, 在数据库当中, 事务表示一件完整的事
  2. 一个业务的完成可能需要多条DML语句共同配合才能完成, 例如转账业务, 需要执行两条DML语句, 先更新张三的业务, 再更新李四的业务, 为了保证转账业务不出现问题, 就必须保证这两条DML语句必须同时成功或者同时失败, 所以我们就需要借助业务这一机制来完成
  3. 也就是说使用了事务机制之后, 在同一个事务内部, 多条DML语句会同时成功或者同时失败, 不会出现一部分成功一部分失败的现象
  4. 事务只针对DML语句(insert, delete, update)有效, 因为只有这三个语句是改变表中数据
  5. 事务只针对DML语句有效, 但是在一个事务内部是可以有DQL语句进行结果查询的

事务四大特性(ACID)

  1. 原子性(Atomicity)
    是指事务包含的所有操作要么全部成功,要么同时失败
  2. 一致性(Consistency)
    是指事务开始前,和事务完成后,数据应该是一致的。例如张三和李四的钱加起来是5000,中间不管进行过多少次的转账 操作(update),总量5000是不会变的。这就是事务的一致性。
  3. 隔离性(Isolation)
    隔离性是当多个⽤户并发访问数据库时,⽐如操作同⼀张表时,数据库为每⼀个⽤户开启的事务,不能被其他事务的操作所⼲扰,多个并发事务之间要相互隔离, 隔离性主要解决的是多个事务并发的情况, 这在下面的内容里很重要
  4. 持久性(Durability)
    持久性是指⼀个事务⼀旦被提交了,那么对数据库中的数据的改变就是永久性的,即便是在数据库系统遇到故障的情况下也不会丢失提交事务的操作

演示MySQL事务

手动开启事务

在dos命令行窗口的基本操作指令

事务操作 基本指令
开启事务 start transaction / begin
提交事务(成功提交事务) commit
回滚事务(未成功提交事务) rollback

只要执行上面的commit或者是rollback事务都会结束, 前者是成功提交操作(即所有的操作都生效), 后者是回滚(未成功提交)撤销事务中的所有操作
演示如下
首先是查找一下t_student表中的数据
在这里插入图片描述
现在我们开启事务并执行一些DML操作后commit(成功提交)
在这里插入图片描述
我们发现成功插入了一条数据
现在我们再次开启一个事务并执行一些DML操作后rollback(未成功提交)
在这里插入图片描述
此时我们的stu_no = 13的这行记录并没有被删除…

MySQL默认事务机制

关于MySQL默认的事务机制:
MySQL默认情况下采用的事务机制是 : 自动提交, 所谓自动提交就是只要执行一条DML语句, 就会自动的开启事务并且执行结束之后直接commit, 所以这时候我们rollback是无法进行回滚的…(ACID中的持久性)

测试如下
在这里插入图片描述
分析一下底层的运行机制, 当执行insert语句的时候, 底层自动开启了事务机制, 这条SQL执行结束之后默认进行commit操作, 所以此时rollback并不能使之前的事务回滚