事务(Transaction)「建议收藏」

事务(Transaction)「建议收藏」1、什么是事务一个事务是一个完整的业务逻辑单元,不可再分。 比如:银行转账,从A账户向B账务转账10000,需要执行两条update语句 update t_act set balance = bala

事务(Transaction)

1、什么是事务
一个事务是一个完整的业务逻辑单元,不可再分。

比如:银行转账,从A账户向B账务转账10000,需要执行两条update语句

update t_act set balance = balance - 10000 where actno = "act-001" ; 
update t_act set balance = balance + 10000 where actno = "act-002" ; 

以上两条DML语句必须同时成功,或同时失败,不允许一条成功,一条失败!

想要保证以上的两条DML语句(update、insert、delete)同时成功或者同时失败,那么就需要使用数据库的“事务机制” !

 事务(Transaction)「建议收藏」

2、事务原理
假设一个事儿,需要先执行一条insert,再执行一条update,最后执行一条delete,这个事儿才算完成。

开启事务机制(开始)

  • 执行insert语句–>insert.(这个执行成功之后,把这个执行记录到数据库的操作历史当中,并不会向文件中保存-条数据,不会真正的修改硬盘上的数据。)
  • 执行update语句—> update…(这个执行也是记录一下历史操作,不会真正的修改硬盘上的数据)
  • 执行delete语句—->delete…(这个执行也是记录一下历史操作【记录到缓存】,不会真正的修改硬盘上的数据)

提交事务或者回滚事务(结束)

怎么提交事务,怎么回滚事务?

提交事务:commit;语句

回滚事务:rollback;语句==(回滚永远都是只能回到上次事务的提交点!)==

MySQL默认的事务行为是怎么样的?

MySQL默认情况下是支持自动提交事务的。(自动提交):就是一条DML提交一次!

怎么样才能将MySQL的自动提交事务关闭呢?

先执行如下命令:start transaction ,开启事务,也是将自动提交事务关闭!

在次命令后的指定的DML语句并不会持久化到数据库,等待commit | rollback 操作!

3、事务的特性:ACID
A:原子性(atomicity):事务是最小的工作单元,不可再分。

C:一致性(consistency):事务必须保证多条DML语句同时成功或同时失败。

I :隔离性(isolation):事务A与事务B之间具有隔离。

D:持久性(durability):持久性说的时最终的数据必须持久化道硬盘文件中,事务才算成功的结束。

4、事务的隔离性

将事务A与事务B分别比作教室A,B,然而它们之间的墙就是隔离性,墙越厚隔离级别越高!(这种墙分为四个级别)

  • 第一级别:读未提交(read uncommitted):我们当前事务可以读取对方未提交的事务,
  • 存在问题:存在脏读(Dirty read)现象,表示读到了脏的数据。
  • 第二级别:读已提交(read committed):我们当前事务可读取对方已提交的事务,解决了脏读现象,存在问题:不可重复读。
  • 第三级别:可重复读(repeatable read):解决不可重复读,永远读取到的都是开启事务时的数据,==存在问题:读取到的数据是幻像(幻读)==例如:执行一条查询的sql需要从1点3点,那么这条sql读取的一直是1点的数据,即使13点之间存在其他操作,该sql的结果并不会受到影响,类似快照,一直读取的是快照中的数据。
  • 第四级别:序列化读/串行化读(serializable):解决了所有问题。 效率低,需要事务排队(类似于synchronized)。

Oracle数据库默认级别:第二级别;读已提交

Mysql数据库默认级别:第三级别,可重复读

5、验证各种隔离级别

对以上各种隔离级别做一个验证

通过命令 select @@tx_isolation;查看当前事物的隔离级别 !
+-------------------+
| @@tx_isolation    |
+-------------------+
| REPEATABLE-READ   |
+-------------------+

读未提交(read uncommitted):

#执行如下命令,设置全局的事务隔离级别为读未提交
set global transaction isolation level read uncommitted;

事务(Transaction)「建议收藏」

读已提交(read committed):

测试 读已提交(read committed)

#执行如下命令,设置全局的事务隔离级别为读已提交
set global transaction isolation level read committed;

 

事务(Transaction)「建议收藏」

可重复读(repeatable read):

测试:可重复读(repeatable read)

#执行如下命令,设置全局的事务隔离级别为可重复读
set global transaction isolation level read committed;

事务(Transaction)「建议收藏」

序列化读/串行化读(serializable):

测试 序列化读/串行化读(serializable)

#执行如下命令,设置全局的事务隔离级别为可重复读
set global transaction isolation level serializable;

  事务(Transaction)「建议收藏」

 

原文地址:https://www.cnblogs.com/wyh518/archive/2022/10/26/16829782.html

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
转载请注明出处: https://daima100.com/4608.html

(0)
上一篇 2023-06-12
下一篇 2023-06-12

相关推荐

  • MySQL数据类型全解析「建议收藏」

    MySQL数据类型全解析「建议收藏」1 概述 本文主要介绍了MySQL的各种数据类型,版本为8.x, MySQL的数据类型可以分为六类:数值类型,日期时间类型,字符串类型,二进制类型,JSON类型与空间数据类型. 2 数值类型 数值类…

    2023-02-04
    147
  • 【MySQL】LIMIT以及LIMIT OFFSET「建议收藏」

    【MySQL】LIMIT以及LIMIT OFFSET「建议收藏」LIMIT两种方法: 1 两种方法: 2 (1)LIMIT A; 3 #表示从第一条记录开始取A条记录; 4 5 (2)LIMIT A,B; 6 #参数A为可选参数,表示跳过A条数据(默认为0) 7

    2022-12-26
    161
  • Python List:高效处理序列数据

    Python List:高效处理序列数据List是Python的一种基本数据类型,它是一个有序序列,可以包含任意类型的数据,同时可以动态添加和删除元素。以下是一些List的基本操作:

    2024-03-07
    85
  • 两种运行Python程序的方法

    两种运行Python程序的方法Python作为一种高级编程语言,可用于多种任务——从数据分析到人工智能,从网页开发到自动化。Python社区也因此庞大,吸引了越来越多的程序员。当你开始使用Python时,你一定会问自己:如何运行Python程序?在本文中,我们将为您介绍两种常见的运行Python程序的方法。

    2024-09-15
    25
  • mongodb—-复制「终于解决」

    mongodb—-复制「终于解决」mongodb复制原理mongodb的复制最少需要两个节点,一个master,用于处理用户的请求,其余都是从节点,负责复制主节点上的数据。mongodb常见集群环境:一主一从、一主多从。master…

    2023-04-01
    146
  • sql创建数据库语句_数据库建表语句

    sql创建数据库语句_数据库建表语句本文介绍如何使用 SQL INSERT 语句将数据插入到表中,如何用 INSERT SELECT 从其他表中导入行,如何用 SELECT INTO 将行导出到一个新表。 一、数据插入 毫无疑问,SEL

    2023-05-18
    155
  • Python List:高效处理数据的利器

    Python List:高效处理数据的利器在Python中,列表(List)是一种非常常用的数据结构,它可以用来存储一系列有序的元素。与字符串不同,列表中的元素可以是不同类型的,例如有整数、浮点数、字符串等等。在处理数据方面,列表的应用非常广泛,例如数据预处理、数据清洗、数据分析等等。本文将从多个方面阐述Python列表的使用方法和技巧,为大家介绍Python List这个高效处理数据的利器。

    2023-12-04
    114
  • Python字母大小写转换

    Python字母大小写转换Python是一种很受欢迎的编程语言,在Python中有许多内置函数和方法可以用来操作字符串。字符串是Python中非常重要的一种数据类型,通常用来存储文本类型的数据。其中一种字符串操作是将字母的大小写转换,这是非常常见的操作。

    2024-08-21
    32

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注