MYSQL进阶-事务

news/2025/1/14 22:30:42/

什么是数据库事务?

事务是一个不可分割的数据库操作序列,也是数据库并发控制的基本单位,其执
行的结果必须使数据库从一种一致性状态变到另一种一致性状态。事务是逻辑上
的一组操作,要么都执行,要么都不执行。
事务最经典也经常被拿出来说例子就是转账了。
假如小明要给小红转账1000元,这个转账会涉及到两个关键操作就是:将小明
的余额减少1000元,将小红的余额增加1000元。万一在这两个操作之间突然出
现错误比如银行系统崩溃,导致小明余额减少而小红的余额没有增加,这样就不
对了。事务就是保证这两个关键操作要么都成功,要么都要失败。

事务的特性

事物的四大特性(ACID)?
关系性数据库需要遵循ACID规则,具体内容如下:
在这里插入图片描述

  1. 原子性: 事务是最小的执行单位,不允许分割。事务的原子性确保动作
    要么全部完成,要么完全不起作用;
  2. 一致性: 执行事务前后,数据保持一致,多个事务对同一个数据读取的
    结果是相同的;
  3. 隔离性: 并发访问数据库时,一个用户的事务不被其他事务所干扰,各
    并发事务之间数据库是独立的;
  4. 持久性: 一个事务被提交之后。它对数据库中数据的改变是持久的,即
    使数据库发生故障也不应该对其有任何影响。

事务的状态

  1. 活动的
  2. 部分提交的
  3. 失败的
  4. 中止的
  5. 提交的

在这里插入图片描述

如何使用事务

mysql事务会默认提交,一个SQL语句就是一个单独的事务,自己可以设置默认不提交,自己控制事务。

查看自动提交变量

SHOW variables like 'autocommit';

设置系统不自动提交

SET autocommit = false;

对DML语言有效,对DDL无效,DDL会自动提交

显式事务

BEGIN,COMMIT

BEGINUPDATE book1 SET num = 1000 WHERE id = 1;COMMIT

隐式事务

-DDL

隐式使用或修改mysql数据库中的表
当我们使用 ALTER USER、CREATE USER 、DROP USER 、GRANTRENAME USER 、REVOKE 、SETPASSWORD 等语句时也会隐式的提交前边语句所属于的事务。

事务控制或关于锁定的语句

  1. 当我们在一个事务还没提交或者回滚时就又使用 START TRANSACTION 或者BEGIN 语开启了另一个事务时,会 隐式的提交 上一个事务。
  2. 当前的 autocommit 系统变量的值为 OFF,我们手动把它调为 ON 时,也会 隐式的提交 前边语句所属的事务。
  3. 使用LOCK TABLES、UNLOCK TABLES 等关于锁定的语句也会 隐式的提交前边语句所属的事务

加载数据的语句
使用 LOAD DATA 语句来批量往数据库中导入数据时,也会 隐式的提交 前边语句所属的事务

关于MySQL复制的一些语句

使用START SLAVE、STOP SLAVE、RESET SLAVE、CHANGE MASTER TO 等语时会隐式的提交 前边语所属的事务。

其它的一些语句

使用ANALYZE TABLE、CACHE INDEX、 CHECK TABLE、FLUSH、 LOAD INDEX INTO CACHE、OPTIMIZE TABLE、REPAIR TABLE等


http://www.ppmy.cn/news/1001945.html

相关文章

2023华数杯数学建模A题思路分析 - 隔热材料的结构优化控制研究

# 1 赛题 A 题 隔热材料的结构优化控制研究 新型隔热材料 A 具有优良的隔热特性,在航天、军工、石化、建筑、交通等 高科技领域中有着广泛的应用。 目前,由单根隔热材料 A 纤维编织成的织物,其热导率可以直接测出;但是 单根隔热…

小白如何获取CNVD事件型原创漏洞证明?——记CNVD漏洞挖掘思路

引子: 相信许多人都想要被别人叫做大佬,漏洞挖掘当中肯定也不例外,所以在此之前让我们康康度娘对大佬的定义:形容一个人很巨表示对其顶礼膜拜的态度。在这种情况下, 国家信息安全漏洞共享平台(CNVD) 则为我们提供了一个成为大佬的平台, CNVD作为国内最具…

负数的二进制转换成十进制

对于一个k位的二进制正数,其表示成十进制的结果是: pos[i]表示:这个正数的二进制形式的第i位是1。 i从最低位(第0位)开始,一直到k-1位。有符号数中,正数的第k-1为0,负数的第k-1位为…

uniapp 全局数据(globalData)的设置,获取,更改

globalData,这是一种简单的全局变量机制。这套机制在uni-app里也可以使用,并且全端通用 因为uniapp基本上都是将页面,或者页面中相同的部分,进行组件化,所以会存在父,子,(子&#xf…

C# Blazor 学习笔记(7):组件嵌套开发

文章目录 前言相关资料组件嵌套组件模板RenderFragment 意义传统前端样式组件化css 前言 我们在组件化一共有三个目的。 不用写CSS不用写html不用写交互逻辑 简单来说就是Java常说的约定大于配置。我们只需要必须的参数即可,其它的都按照默认配置。我们不需要关系…

RL — 强化学习算法概述

一、说明 在本系列中,我们检查了许多强化学习(RL)算法,例如,MoJoCo任务的策略梯度方法,Atari游戏的DQN和机器人控制的基于模型的RL。虽然许多算法都是针对特定领域引入的,但这种联系只能是遗留的…

Windows用户如何将cpolar内网穿透配置成后台服务,并开机自启动?

Windows用户如何将cpolar内网穿透配置成后台服务,并开机自启动? 文章目录 Windows用户如何将cpolar内网穿透配置成后台服务,并开机自启动?前置准备:VS Code下载后,默认安装即可VS CODE切换成中文语言 1. 将…

kprobe 原理详细分析

》内核新视界文章汇总《 文章目录 kprobe实现原理分析1 简介2 一个简单的例子3 原理分析3.1 struct kprobe3.2 register_kprobe3.3 arm_kprobe3.4 kprobe 的执行3.4.1 single_step_handler 4 总结 kprobe实现原理分析 1 简介 linux内核提供了许多调试内核的方式,…