当前位置: 首页 > article >正文

mysql学习笔记-事务基础知识

1、各存储引擎事务支持情况

只有InnoDB支持事务

2、事务的ACID特性

2.1原子性(atomicity)

不可分割的工作单位,要么全部提交,要么全部失败回滚。

2.2 一致性(consistency)

数据从一个语义合法性状态变换到另外一个语义合法性状态,跟具体业务有关。说你一致就一致,不一致就不一致?
举例1、A给B转账,定义了一个状态,要求A+B的总余额必须不变,变了就违反了一致性原则
举例2、在数据表中我们将 姓名 字段设置为 唯一性约束,这时当事务进行提交或者事务发生回滚的时候,如果数据表中的姓名不唯一,就破坏了事务的一致性要求。

2.3、隔离型(isolation)

事务的隔离性是指一个事务的执行不能被其他事务干扰 ,即一个事务内部的操作及使用的数据对 并发 的其他事务是隔离的,并发执行的各个事务之间不能互相干扰。类似于java多线程,线程直接独立互不干扰。
在这里插入图片描述

2.4、持久性(durability)

持久性是指一个事务一旦被提交,它对数据库中数据的改变就是 永久性的 ,接下来的其他操作和数据库故障不应该对其有任何影响。
ACID 是事务的四大特性,在这四个特性中,原子性是基础,隔离性是手段,一致性是约束条件,而持久性是我们的目的。

3、事务的状态

3.1、活动的(active)
3.2、部分提交的(partially committed)
3.3、失败的(failed)
3.4、中止的(aborted)
3.5、提交的(committed)

3、如何使用事务

步骤1:开启事务
步骤2:一系列的DML操作
步骤3:事务结束的状态:提交的状态(COMMIT)、中止的状态(ROLLBACK)

3.1.显式事务

如何开启?使用关键字:start transaction 或begin
start transaction 后面可以跟: read only / read write(默认)/ with consistent snapshot
保存点(savepoint)

3.3、隐式事务

关键字:autocommit
set autocommit = false;
SHOW VARIABLES LIKE ‘autocommit’;#默认是ON
UPDATE account SEr balance=balance-10 WHERE id=1;#此时这条DML操作是一个独立的事务UPDATE account sET balance=balance+10 WHERE id=2;#此时这条DML操作是一个独立的事务
如果关闭自动提交?
SET autocommit= FALSE;#针对于DML操作是有效的,对DDL操作是无效的
UPDATE account sEr balance=balance-10 WHERE id = 1;
UPDATE account sEr balance=balance +10 wHRE id=2;
COMMIT;#或rollback;
#方式2:我们在autocommit为true的情况下,使用ftart transaction 或begin开启事务,那么D操作就不会自动提交数据

3.4、隐式提交数据的情况

①数据定义语言(Data definition language,缩写为:DDL)
数据库对象,指的就是 数据库 、 表、 视图、存储过程 等结构。当我们使用 CREATE、 ALTER、 DROP 等语句去修改数据库对象时,就会隐式的提交前边语句所属于的事务。即:
BEGIN;
SELECT …#事务中的一条语句
UPDATE …# 事务中的一条语句
…·# 事务中的其它语句
CREATE TABLE…#此语句会隐式的提交前边语句所属于的事务
②隐式使用或修改mysql数据库中的表
当我们使用ALTER USER、CREATE USER、 DROP USER、 GRANT、 RENAME USER、 REVOKE、 SETPASSWORD 等语句时也会隐式的提交前边语句所属于的事务。
③事务控制或关于锁定的语句
当我们在一个事务还没提交或者回滚时就又使用 START TRANSACTION 或者 BEGIN 语句开启了另一个事务时,会 隐式的提交 上一个事务。即:

BEGIN;
SELECT...#事务中的一条语句
UPDATE ...# 事务中的一条语句
#事务中的其它语句

http://www.kler.cn/a/523016.html

相关文章:

  • 再见了流氓软件~~
  • CTF从入门到精通
  • 马尔科夫模型和隐马尔科夫模型区别
  • 2025-01-28 - 通用人工智能技术 - RAG - 本地安装 DeepSeek-R1对话系统 - 流雨声
  • MySQL分表自动化创建的实现方案(存储过程、事件调度器)
  • ubuntu取消输入密码
  • 渗透测试之WAF规则触发绕过规则之规则库绕过方式
  • Linux进程调度与等待:背后的机制与实现
  • 大数据学习之Kafka消息队列、Spark分布式计算框架一
  • AWS SimSpace Weaver
  • 如何在本地部署deepseek r1模型?
  • 物业软件推动物业行业数字化转型 实现高效管理和优质客户体验
  • 【PyTorch】6.张量形状操作:在深度学习的 “魔方” 里,玩转张量形状
  • Couchbase UI: Query
  • 具身智能技术趋势
  • 编程语言中的常见Bug及解决方案
  • 2024年除夕
  • Hive存储系统全面测试报告
  • MATLAB中处理大数据的技巧与方法
  • 计算机网络之计算机网络的定义、组成与功能
  • 如何靠Python完成设备巡检
  • 数字电子技术(十六)——CMOS反相器以及CMOS反相器的电路结构和工作原理
  • python-leetcode-翻转二叉树
  • Kotlin判空辅助工具
  • 【Unity3D】实现Decal贴花效果,模拟战旗游戏地形效果
  • 基于物联网设计的疫苗冷链物流监测系统