iis服务器助手广告广告
返回顶部
首页 > 资讯 > 数据库 >MySQL数据库事务transaction示例讲解教程
  • 205
分享到

MySQL数据库事务transaction示例讲解教程

2024-04-02 19:04:59 205人浏览 薄情痞子
摘要

目录1、什么是事务?2、和事务相关的语句只有这3个DML语句:insert、delete、update3、假设所有的业务都能使用1条DML语句搞定,还需要事务机制吗?4、事务的原理5

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-0021';

以上两条DML语句必须同时成功,或者同时失败,不允许出现一条成功,一条失败。
要想保证以上的两条DML语句,同时成功或者同时失败,那么就需要使用数据库
“事务机制”。

2、和事务相关的语句只有这3个DML语句:insert、delete、update

“为什么只有这3个DML语句:insert、delete、update?”
因为它们这三个语句都是和数据库表中的"数据相关"的。事务的存在是为了保证数据的完整性,安全性。

3、假设所有的业务都能使用1条DML语句搞定,还需要事务机制吗?

不需要事务。
但实际情况不是这样的,通常一个事儿(“事务”)需要多条DML语句共同联合完成。

4、事务的原理

在这里插入图片描述

注意:
一旦提交事务,就会把历史操作持久化到硬盘上去,持久化完成后,清空历史记录。
一旦回滚事务,就会把历史记录直接清空掉,而不持久化到硬盘中。
事务操作,还可以设计保存点:了解。

5、事务的四大特性:ACID

在这里插入图片描述

事务包括四大特性:ACID
A原子性:事务是最小的工作单元,不可再分。
C一致性:事务必须保证多条DML语句,同时成功或者同时失败。
I隔离性:事务A与事务B之间具有隔离。
D持久性:持久性指的是最终数据必须持久化到硬盘文件中,事务才算成功结束。

下面对上述事务四大特性,进行一个更为详细的说明
“原子性”:一组操作要么都成功,要么都失败,这一组操作是不可拆分的。
“一致性”:事务发生前后,数据总额仍然是匹配的。模拟一个人给另外一个人转账来说,转账之前,2人的金额总和为400;转账以后,2人的金额总额仍为400。
“隔离性”:所有操作没有执行完毕之前,其它会话窗口不能看见中间数据的改变过程,只有当前窗口可以看见数据改变过程。
“持久性”:一旦commit提交后,事务产生的影响就不能够撤销了,已经实实在在把数据修改了。

6、关于事务之间的隔离性

"事务的隔离性存在隔离级别,理论上隔离级别包括4个"
隔离级别一般都是从2级、3级起步,1级一般用不上。

1)第一级别:读未提交(read uncommitted)

  对方的事务还没有提交,当前事务可以读取到对方为提交的数据。
   读未提交存在的问题:"脏读现象",表示读到了脏数据。
   "脏读":指的是一个事务正在修改数据,但是这种修改并没有提交到数据库。
而另一个事务,访问到了该数据,此时这个数据属于【脏数据】,因而叫脏读。

2)第二级别:读已提交(read committed)

   对方事务提交后的数据,我方可以读取到。
   这种隔离级别解决了:脏读现象没有了。
   读已提交存在的问题:不可重复读。

3)第三级别:可重复读(repeatable read)

   这种隔离级别解决了:不可重复读问题。
   这种级别存在的问题:读取到的数据是幻想,即读取的是备份数据。

4)第四级别:序列化读/串行化读(serializable)

   解决了所有问题。
   但是效率低,需要事务排队。

"需要注意的是"
oracle数据库默认的隔离级别是:读已提交(第二级别)。
mysq1数据库默认的隔离级别是:可重复读(第三级别)。

7、演示事务的隔离级别(演示数据自己造一些)

1)演示事务之前,需要掌握的知识点。


1)Mysql默认情况下,事务是自动提交的。
2)什么是自动提交?
   只要是执行任意一条DML语句,则自动提交一次。
   因此,在演示事务之前,必须先关闭自动提交。
   "关闭自动提交语句":start transaction;    
3)"演示事务需要知道的3条命令:"
   -- 关闭自动提交事务功能。
   start transaction;
  -- 提交事务。
  commit;
  -- 回滚事务,只能回滚到上一次的提交点。
  rollback;   

2)设置全局事务隔离级别。


"设置全局事务隔离级别,设置完成后,退出重新登陆。"
-- 设置第一级别
set global transaction isolation level read uncommitted;
-- 设置第二级别
set global transaction isolation level read committed;
-- 设置第三级别(系统默认的事务级别,不用设置)
set global transaction isolation level repeatable read;
--设置第四级别
set global transaction isolation level serializable;

"查看全局事务隔离级别"
mysql> select @@global.tx_isolation;
+-----------------------+
| @@global.tx_isolation |
+-----------------------+
| REPEATABLE-READ       |
+-----------------------+
1 row in set, 1 warning (0.00 sec)

3)演示读未提交。

首先,设置全局事务隔离级别。

在这里插入图片描述

下面进行正式的演示:

4)演示读已提交

首先,设置全局事务隔离级别。

在这里插入图片描述

下面进行正式的演示:

在这里插入图片描述

5)演示可重复读

首先,设置全局事务隔离级别。

在这里插入图片描述

下面进行正式的演示:

在这里插入图片描述

这个需要注意:

这里演示的是"可重复读",我们在右边窗口演示事务的一些列过程,左边窗口
根本无法读取,左边窗口读取到的,始终是原始数据的备份数据。

怎么理解呢?

你别忘记了,左边窗口,也是开启事务功能了的,start transaction;只要
是左边这个窗口的事务功能,没有结束(commit或者rollback都可以结束事务),那
么左边窗口读取到的,始终是原始数据的备份数据,这就是我们所说的"幻想"。任
凭右边黑窗口中做了任何改变,就算你也提交了事务,我左边窗口,就是看不到。

左边黑窗口,要怎么才可以看见这个变化呢?"

只有左边这个黑窗口,先结束了当前黑窗口的事务,重新再次读取,就可以看
到数据是真实变化了。 

6)演示序列化读

首先,设置全局事务隔离级别。

在这里插入图片描述

下面进行正式的演示:
第一幅图:

在这里插入图片描述

当左边窗口,使用"commit"命令,提交事务以后,我们再看右边窗口的变化。

在这里插入图片描述

以上就是Mysql数据库事务transaction示例讲解教程的详细内容,更多关于MySQL数据库事务transaction的资料请关注编程网其它相关文章!

您可能感兴趣的文档:

--结束END--

本文标题: MySQL数据库事务transaction示例讲解教程

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

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

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

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

下载Word文档
猜你喜欢
  • MySQL数据库事务transaction示例讲解教程
    目录1、什么是事务?2、和事务相关的语句只有这3个DML语句:insert、delete、update3、假设所有的业务都能使用1条DML语句搞定,还需要事务机制吗?4、事务的原理5...
    99+
    2024-04-02
  • MySQL数据库约束操作示例讲解
    目录一、约束是什么二、约束的具体操作Not NULLUNIQUE约束的组合使用PRIMARY KEYDEFAULTFOREIGN KEY一、约束是什么 约束就是,在创建表的时候,对表设置一些规则,只有满足这些规则,才可以...
    99+
    2022-11-15
    MySQL数据库约束 MySQL约束
  • MySQL数据库事务的示例分析
    小编给大家分享一下MySQL数据库事务的示例分析,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!事务特点:ACID从业务角度出发,...
    99+
    2024-04-02
  • MySQL数据库存储过程和事务的区别讲解
    事务是保证多个SQL语句的原子型的,也就是要么一起完成,要么一起不完成 存储过程是把一批SQL语句预编译后放在服务器上,然后可以远程调用 存储过程: 一组为了完成特定功能的SQL语句集(或者自定义数据库操作...
    99+
    2024-04-02
  • MySql数据类型教程示例详解
    目录1.简要概述2. MySQL数据类型详解1) 字符串类型2) 整数类型3)浮点数类型4)日期/时间类型1.简要概述 为什么要开通MySQL这个学习板块呢?因为这是一名数据分析师必...
    99+
    2024-04-02
  • MySQL数据库基础篇SQL窗口函数示例解析教程
    目录本文简介正文介绍聚合函数 + over()排序函数 + over()ntile()函数 + over()偏移函数 + over()本文简介 前段时间,黄同学写了一篇《MySQL窗...
    99+
    2024-04-02
  • MySQL数据管理操作示例讲解
    目录外键DML语言添加 insert修改 update删除 delete外键 方式一:在创建表的时候,增加约束 删除有外键的表的时候,要先删除引用外键的表 物理外键:不建议使用,数据库级别的外键,不建议使用!(...
    99+
    2022-12-22
    MySQL数据管理 SQL数据管理
  • MySQL数据库自连接实例讲解
    目录什么是自连接?自连接语法1、内连接1.1隐式内连接1.2.显式内连接2、外连接2.1.左外连接2.2.右外连接案例案例演示1案例演示2扩展需求总结什么是自连接?     &nb...
    99+
    2023-06-11
    mysql自连接是什么 mysql自连接查询 数据库自链接
  • MySQLtransaction事务安全示例讲解
    目录事务安全 transaction事务基本原理自动事务手动事务事务的使用回滚点事务的特点事务安全 transaction 事务 transaction 访问可能更新数据库中各种数据...
    99+
    2024-04-02
  • Mysql示例数据库
    官方提供了多个示例数据库: 下载地址: https://dev.mysql.com/doc/index-other.html github示例数据库: 下载地址:https://github.com...
    99+
    2024-04-02
  • MySQL系列数据库设计三范式教程示例
    目录一、数据库设计三范式相关知识说明1、什么是设计范式?2、为什么要学习数据库的三个范式?3、三范式都有哪些?二、数据库表的经典设计方案一对一怎么设计?一、数据库设计三范式相关知识说...
    99+
    2024-04-02
  • golang操作连接数据库实现mysql事务示例
    目录mysql驱动posgre驱动连接postgres连接mysql初始化连接SetMaxOpenConnsSetMaxIdleConnsCRUD查询单行查询QueryRow多行查询...
    99+
    2024-04-02
  • MySQL教程数据定义语言DDL示例详解
    目录1.SQL语言的基本功能介绍2.数据定义语言的用途3.数据库的创建和销毁4.数据库表的操作(所有演示都以student表为例)1)创建表2)修改表3)销毁表如果你是刚刚学习MyS...
    99+
    2024-04-02
  • MySQL教程DML数据操纵语言示例详解
    目录1.数据操纵语言(DML)2.增添数据(insert)3.复制已有表,生成新表1)复制已有表的结构和数据。2)只复制已有表的结构(得到的是一个空结构表)。3)在2的基础上,向空结...
    99+
    2024-04-02
  • MySQL数据分析存储引擎示例讲解
    目录1.引入案例2.查看系统默认的存储引擎和默认字符集3.常见的存储引擎1)MyISAM:不支持事务。(张马虎)MyISAM的优缺点:2)InnoDB:支持事务。(李小心)InnoD...
    99+
    2024-04-02
  • MySQL事务与锁实例教程详解
    目录mysql事务和锁事务事务的控制语句事务隔离级别设置脏读不可重复读幻读锁机制InnoDB的行级锁锁实战死锁总结MySQL事务和锁 事务 说到关系型的数据库的事务,相信大家对四大特性都不陌生,分别是原子性、一致性、隔离...
    99+
    2024-04-02
  • Spring数据库事务的实现机制讲解
    目录事务控制的核心——Connection用AOP技术保持当前的ConnectionService层和Dao层共享Connection事务为什么要切在Service层的理由sprin...
    99+
    2024-04-02
  • MySQL示例数据库(MySQL Sample Databases) 之 sakila数据库
    文章目录 MySQL示例数据库(MySQL Sample Databases) 之 sakila数据库官方示例数据介绍sakila数据库sakila数据库安装sakila/sakila-schema.sql的脚本内容sakila的结...
    99+
    2023-08-17
    数据库 mysql sql
  • RocketMQ事务消息图文示例讲解
    RocketMQ 也允许我们像mysql 一样发送具有事务特征的消息 MQ 的事务流程(本地代码正常执行) MQ 的消息补偿过程(当本地代码执行失败时) MQ 消息的三种状态 提...
    99+
    2022-12-27
    RocketMQ事务消息 RocketMQ事务
  • mysql跨库事务XA操作示例
    本文实例讲述了mysql跨库事务XA操作。分享给大家供大家参考,具体如下: 前一段时间在工作中遇到了跨库事务问题,后来在网上查询了一下,现在做一下整理和总结。 1、首先要确保mysql开启XA事务支持 ...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作