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

第 18 章 从猫爷借钱说起——事务简介

18.1 事务的起源

CREATE TABLE account (
id INT NOT NULL AUTO_INCREMENT COMMENT '自增id',
name VARCHAR(100) COMMENT '客户名称',
balance INT COMMENT '余额',
PRIMARY KEY (id)
) Engine=InnoDB CHARSET=utf8;
insert into account (name, balance) values ('狗哥', 11), ('猫爷', 2);
18.1.1 原子性(Atomicity)

不可分割,要么全做,要么全不做。

18.1.2 隔离性(Isolation)

访问相同数据的不同操作之前互相隔离,互不影响——线程安全

18.1.3 一致性(Consistency)

数据库世界是现实世界的一个映射,现实世界中存在的约束也要在数据库世界中体现。如果数据库中的数据全部符合现实世界中的约束,我们说这些数据就是一致的,或者说符合一致性的。

18.1.4 持久性(Durability)

当一个状态转换完成后,这个转换结果将永久保留。

18.2 事务的概念

保证原子性、隔离性、一致性和持久性的一个或多个数据库操作称为一个事务(transaction)。

事务状态描述
活动的(active)事务应对的数据库操作正在执行过程中
部分提交的(partially committed)事务中的最后一个操作执行完成,但由于操作都在内存中执行,所造成的影响并没有刷新到磁盘时
失败的(failed)事务处在活动的或部分提交的状态时,遇到了某些错误而无法继续执行,或人为停止当前事务的执行
中止的(abort)失败后回滚完成
提交的(committed)处在部分提交的状态的事务同步到磁盘上后

在这里插入图片描述

18.3 MySQL中事务的语法

18.3.1 开启事务
BEGIN;
START TRANSACTION [option];
  1. READ WRITE:读写事务
  2. WITH CONSISTENT SNAPSHOT:一致性读
18.3.2 提交事务
COMMIT;
18.3.3 手动中止事务
ROLLBACK;
18.3.4 支持事务的存储引擎

目前只有 InnoDB 和 NDB 。

18.3.5 自动提交
SHOW VARIABLES LIKE 'autocommit';

在这里插入图片描述

默认情况下,如果不显式开启事务,那么每一条语句都算是一个独立的事务。这种特性称为自动提交

18.3.6 隐式提交

开启事务后,虽然没有手动提交,但因为输入了某些语句导致事务被偷偷提交。

  1. 定义或修改数据库对象的DDL
  2. 隐式使用或修改 mysql 库中的表
  3. 事务控制或关于锁定的语句
  4. 加载数据的语句
  5. 关于 MySQL 复制的一些语句
  6. 其他一些语句
18.3.7 保存点

savepoint,在事务对应的数据库语句中打几个点,回滚时可以指定回滚到某个点。

18.4 总结

  1. 事务指需要保证原子性、隔离性、一致性和持久性的一个或多个数据库操作
  2. 事务的执行状态包括活动的、部分提交的、提交的、失败的、中止的。

http://www.mrgr.cn/news/38213.html

相关文章:

  • Cadence23中的一些设置
  • 多路复用和事件轮询机制
  • 大厂面试真题-什么是CAS单点登录?什么原理
  • jupyter快捷键
  • 【JavaEE初阶】深入理解wait和notify以及线程饿死的解决
  • MySQL - 单表查询
  • QQ机器人搭建
  • docker build 有时候不展示命令的输出情况,怎么办?
  • 尚硅谷vue3+TypeScript笔记大全
  • 五.海量数据实时分析-FlinkCDC+DorisConnector实现数据的全量增量同步
  • 递归算法详解
  • 如果只能保留一个复制粘贴软件,那一定是它pastemate
  • LeetCode讲解篇之5. 最长回文子串
  • 笔试练习day6
  • Mysql优化(常见优化)
  • 基于Java的停车场管理微信小程序 停车场预约系统【源码+文档+讲解】
  • [大语言模型-论文精读] 大语言模型是单样本URL分类器和解释器
  • <<迷雾>> 第 2 章 用电来表示数 示例电路
  • 深度学习与数学归纳法
  • springboot+vue+java校园共享厨房菜谱系统