MySQL数据库进阶-事务

事务

事务由单独单元的一个或多个SQL语句组成,在这 个单元中,每个MySQL语句是相互依赖的。而整个单独单 元作为一个不可分割的整体,如果单元中某条SQL语句一 旦执行失败或产生错误,整个单元将会回滚。所有受到影 响的数据将返回到事物开始以前的状态;如果单元中的所 有SQL语句均执行成功,则事物被顺利执行。

1、概念:在mysql中的数据用各种不同的技术存储 在文件(或内存)中。

2、通过show engines;来查看mysql支持的存储引 擎。

3、 在mysql中用的最多的存储引擎有:innodb, myisam ,memory 等。其中innodb支持事务,而 myisam、memory等不支持事务

基本操作:

-- 1. 查询张三账户余额
select * from account where name = '张三';
-- 2. 将张三账户余额-1000
update account set money = money - 1000 where name = '张三';
-- 此语句出错后张三钱减少但是李四钱没有增加
模拟sql语句错误
-- 3. 将李四账户余额+1000
update account set money = money + 1000 where name = '李四';

-- 查看事务提交方式
SELECT @@AUTOCOMMIT;
-- 设置事务提交方式,1为自动提交,0为手动提交,该设置只对当前会话有效
SET @@AUTOCOMMIT = 0;
-- 提交事务
COMMIT;
-- 回滚事务
ROLLBACK;

-- 设置手动提交后上面代码改为:
select * from account where name = '张三';
update account set money = money - 1000 where name = '张三';
update account set money = money + 1000 where name = '李四';
commit;

操作方式二:

开启事务: START TRANSACTION 或 BEGIN TRANSACTION; 提交事务: COMMIT; 回滚事务: ROLLBACK;

操作实例:

start transaction;
select * from account where name = '张三';
update account set money = money - 1000 where name = '张三';
update account set money = money + 1000 where name = '李四';
commit;

四大特性ACID

  • 原子性(Atomicity):事务是不可分割的最小操作但愿,要么全部成功,要么全部失败

  • 一致性(Consistency):事务完成时,必须使所有数据都保持一致状态

  • 隔离性(Isolation):数据库系统提供的隔离机制,保证事务在不受外部并发操作影响的独立环境下运行

  • 持久性(Durability):事务一旦提交或回滚,它对数据库中的数据的改变就是永久的

并发事务

问题描述
脏读一个事务读到另一个事务还没提交的数据
不可重复读一个事务先后读取同一条记录,但两次读取的数据不同
幻读一个事务按照条件查询数据时,没有对应的数据行,但是再插入数据时,又发现这行数据已经存在

对于同时运行的多个事务, 当这些事务访问数据库中相同的数据时, 如果没 有采取必要的隔离机制, 就会导致各种并发问题:

脏读: 对于两个事务 T1, T2, T1 读取了已经被 T2 更新但还没有被提交的字段. 之后, 若 T2 回滚, T1读取的内容就是临时且无效的.

不可重复读: 对于两个事务T1, T2, T1 读取了一个字段, 然后 T2 更新了该字段. 之后, T1再次读取同一个字段, 值就不同了.

幻读: 对于两个事务T1, T2, T1 从一个表中读取了一个字段, 然后 T2 在该表中插 入了一些新的行. 之后, 如果 T1 再次读取同一个表, 就会多出几行.

数据库事务的隔离性: 数据库系统必须具有隔离并发运行各个事务的能力, 使它们不会相互影响, 避免各种并发问题.

一个事务与其他事务隔离的程度称为隔离级别. 数据库规定了多种事务隔离级别, 不同隔离级别对应不同的干扰程度, 隔离级别越高, 数据一致性就 越好, 但并发性越弱.

事务隔离级别

隔离级别脏读不可重复读幻读
Read uncommitted
Read committed×
Repeatable Read(默认)××
Serializable×××
  • √表示在当前隔离级别下该问题会出现

  • Serializable 性能最低;Read uncommitted 性能最高,数据安全性最差

Oracle 支持的 2 种事务隔离级别:READ COMMITED, SERIALIZABLE。

Oracle 默认的事务隔离级别为: READ COMMITED

Mysql 支持 4 种事务隔离级别.

Mysql 默认的事务隔离级别 为: REPEATABLE READ 在 MySql 中设置隔离级别

每启动一个 mysql 程序, 就会获得一个单独的数据库连接. 每 个数据库连接都有一个全局变量 @@tx_isolation, 表示当前的 事务隔离级别.

查看当前的隔离级别:

SELECT @@tx_isolation; 

设置当前 mySQL 连接的隔离级别:

set transaction isolation level read committed;

设置数据库系统的全局的隔离级别:

set global transaction isolation level read committed;

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/300494.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

端云协同,Akamai 与快手联合落地 QUIC 提升海外用户视频体验

10月10日,负责支持和保护数字化体验且深受全球企业信赖的解决方案提供商阿卡迈技术公司( Akamai Technologies, Inc.,以下简称:Akamai )( NASDAQ:AKAM )携手全球领先的短视频记录和分享平台快手(HK:1024)通过全面落地 …

【LeetCode】150. 逆波兰表达式求值(ASCII码)

今日学习的文章链接和视频链接 leetcode题目地址:150. 逆波兰表达式求值 代码随想录题解地址:代码随想录 题目简介 即将后缀表达式转换成中缀表达式并计算。 给你一个字符串数组 tokens ,表示一个根据 逆波兰表示法 表示的算术表达式。 …

【无线通信专题】NFC通信模式及可能的应用方式

在文章【无线通信专题】NFC基本原理中我们讲到了NFC工作模式。其中NFC工作模式主要有三种,读写模式、卡模拟模式、点对点模式。 NFC通信模式丰富,NFC Forum定义了三种NFC设备:通用NFCForum设备、读写器设备和标签设备。这些NFC设备可以在三种通信模式下运行,并对应用案例进…

【DevOps-05】Integrate工具

一、简要说明 持续集成、持续部署的工具很多,其中Jenkins是一个开源的持续集成平台。 Jenkins涉及到将编写完毕的代码发布到测试环境和生产环境的任务,并且还涉及到了构建项目等任务。 Jenkins需要大量的插件保证工作,安装成本较高,下面会基于Docker搭建Jenkins。 二、Jenk…

Java Base64简单介绍

1. Base64工具 工具链接 2. Base64示例代码 public class Base64Demo {// 请注意,在处理二进制数据时(例如图片或文件),不需要将字节数组转换为字符串再进行编码或解码,// 可以直接对字节数组进行Base64操作。上述…

【前端设计】文字聚光灯

欢迎来到前端设计专栏&#xff0c;本专栏收藏了一些好看且实用的前端作品&#xff0c;使用简单的html、css语法打造创意有趣的作品&#xff0c;为网站加入更多高级创意的元素。 案例 文字聚光灯效果可以用于网站标题 html <!DOCTYPE html> <html lang"en&quo…

File与Io流

IO&#xff08;Input/Output&#xff09;是指计算机与外部世界进行数据交换的过程。在程序中&#xff0c;IO通常用于读取输入数据或将输出数据写入到外部设备或文件中。 Java的IO库主要分为两种类型&#xff1a;字节流和字符流。 字节流&#xff08;Byte Stream&#xff09;&a…

FreeRTOS移植详解

一、前言 本文旨在讲解FreeRTOS在STM32单片机上的移植步骤&#xff0c;对于FreeRTOS在其他单片机上的移植已具有一定的参考意义。相信读者在看完这篇文章后&#xff0c;一定会有所收获&#xff01; 文末附有相关资料连接&#xff0c;有需要的读者可以自行下载。 二、FreeRTOS源…

各银行小微企业信贷相关产品和机器学习建模案例

各银行小微企业贷款业务 互联网的时代&#xff0c;大量新信息技术的涌现和网络的无处不在&#xff0c;想要抢占这片金融天地&#xff0c;必须重视小微金融业务&#xff0c;小微企业是一直具有重大潜力的客户&#xff0c;商业银行、消金公司发展小微信贷业务可以拓宽自身客户群…

NOSQL与REDIS配置与优化

目录 一、关系数据库与非关系型数据库 1.关系型数据库 2.非关系型数据库 3.关系型数据库和非关系型数据库区别 4.非关系型数据库产生背景 二、Redis 1.Redis介绍 2.Redis 优点和使用场景 三、Redis 安装部署 1.环境准备 2.安装redis 3.修改配置文件 4.定义systemd服…

超声波模块的驱动(STM32、51单片机等)

一、前言 本文旨在分享单片机对超声波模块的驱动&#xff0c;测量距离和显示 二、超声波的驱动 1、超声波模块 2、模块性能 &#xff08;1&#xff09;TCT40-16T/R1 压电陶瓷超声传感器&#xff08;通用型&#xff09; 3、接口定义 Vcc、 Trig&#xff08;控制端&#xff09…

Learning Vision-and-Language Navigation from YouTube Videos

问题&#xff1a; 现有的VLN方法受小规模环境或不合理的路径指令训练的影响&#xff0c;限制了对不可见环境的泛化 解决方案&#xff1a; 使用Youtube上海量的房屋参观视频 1、根据youtube的视频创建一个大规模数据集&#xff0c;该数据集包含来自房屋参观视频的合理路径指…

软件测试|测试平台开发-Flask 入门:编写第一个简单 Web 应用

简介 Flask 是一个轻量级的 Python Web 框架&#xff0c;它使得创建 Web 应用变得简单快捷。相比于Django框架&#xff0c;它具有以下的优点&#xff1a; 轻&#xff1a;Flask 是一个轻量级的 Web 框架&#xff0c;使用 Python 语言编写易&#xff1a;较其他同类型框架更为灵…

Spark基础内容

Spark基本介绍 Spark是什么 定义 Apache Spark是用于大规模数据(large-scala data)处理的统一(unified)分析引擎. Spark与MapReduce对比 mapreduce架构图如下: MapReduce的主要缺点&#xff1a; 1- MapReduce是基于进程进行数据处理&#xff0c;进程相对线程来说&#x…

编程语言的未来,通用代码生成器和超级语言

编程语言的未来&#xff0c;通用代码生成器和超级语言 我们生活在一个编程语言种类繁多&#xff0c;百花齐放的年代。形形色色的编程语言覆盖了软件开发的方方面面。如果说这些变成语言有什么共性的话&#xff0c;大家都知道&#xff0c;大多数编程语言是高级语言。 何为高级…

PyTorch|构建自己的卷积神经网络——nn.Sequential()

之前在构建神经网络时&#xff0c;我们一般是采用这种方式&#xff0c;就像这样&#xff1a; class Network1(nn.Module): def __init__(self): super(Network1,self).__init__() self.conv1 nn.Conv2d(in_channels3, out_channels6, kernel_size5) …

车辆运动学方程推导和代码实现

文章目录 1. 运动学方程2. 模型实现 1. 运动学方程 自行车模型&#xff08;Bicycle Model&#xff09;是车辆数字化模型中最常见的一种运动学模型。其除了可以反映车辆的一些基础特性外&#xff0c;更重要的是简单易用。通常情况下我们会把车辆模型简化为二自由度的自行车模型…

1.分组

#include<bits/stdc.h> using namespace std; int main() {unsigned long long a,b,c0,d,s0;cin>>a>>b;for(long long i1;i<a;i){cin>>d;cd;if(c>b){c0;s;}}cout<<s;return 0; }

【软件测试】概述

《软件缺陷》 定义 &#xff08;从产品内部看&#xff09;软件产品开发或维护过程中存在的错误、毛病等各种问题&#xff08;从产品外部看&#xff09;系统所需要实现的某种功能的失效或违背 表现形式(1) 软件没有实现产品规格说明所要求的功能模块(2) 软件中出现了产品规格说…

Micro-app 微前端框架demo介绍

Micro-app 框架 1、框架安装 npm i micro-zoe/micro-app --save2、子应用对应的view页面 <template><div><!-- name(必传)&#xff1a;应用名称url(必传)&#xff1a;应用地址&#xff0c;会被自动补全为http://localhost:3000/index.htmlbaseroute(可选)&…
最新文章