第 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. 事务的执行状态包括活动的、部分提交的、提交的、失败的、中止的。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值