MySQL:事务机制
为什么需要事务处理?
在执行SQL语句的时候,某些业务要求,一系列操作必须全部执行,而不能仅执行一部分。
MySQL5.0后引入了事务机制,MySQL支持几种基本的数据库引擎,并非所有引擎都支持事务处理。
数据写入
数据直接写入数据文件是非常危险的事,一旦写入过程出错或故障,会产生数据错乱等严重后果。MySQL利用日志来实现间接写入,MySQL共有五种日志,其中redo日志与undo日志与事务有关,日志文件相当于数据文件的一个副本。
管理事务
- 对于单条SQL语句,数据库系统自动将其作为一个事务执行
- 多条SQL语句要想作为一个事务执行,就必须手动管理事务:
START TRANSACTION;
SQL 语句
[COMMIT/ROLLBACK];
事务的属性
可见,数据库事务具有ACID这4个特性:
- Atomic:原子性,将所有SQL作为原子工作单元执行,要么全部执行,要么全部不执行;
- Consistent:一致性,不管任何给定的时间,并发事务有多少,事务必须保证运行结果的一致性;
- Isolation:隔离性,如果有多个事务并发执行,每个事务作出的修改必须与其他事务隔离;
- Duration:持久性,即事务完成后,对数据库数据的修改被持久化存储。
事物的隔离级别
数据库中的事务是并发执行的,由于隔离性会给某些业务场景带来问题,所以需要设置事务的隔离级别来满足业务要求。
事务的四种隔离级别:
隔离级别 | 功能 |
---|---|
read uncommitted | 读取未提交数据 |
read committed | 读取已提交数据 |
repeatable read | 重复读取(默认隔离级别) |
serializable | 序列化执行事务 |
业务场景示例:
# 两个事务同时购票,需要读取事务未提交的临时数据,查看其他事务是否已经选择该票但未提交。
SET SESSION TRANSACTION ISOLATION LEVEL READ UNCOMMITTED;
START TRANSACTION;
SQL 语句
[COMMIT/ROLLBACK];
# 银行转账业务,只能让当前事务读取其他事务提交后的数据
SET SESSION TRANSACTION ISOLATION LEVEL READ COMMITTED;
START TRANSACTION;
SQL 语句
[COMMIT/ROLLBACK];
# 用户拍下订单后还没付钱,此时涨价了,按照涨价前还是涨价后的价格呢?
# 其他事务的提交结果不会影响当前事务
SET SESSION TRANSACTION ISOLATION LEVEL REPEATABLE READ;
START TRANSACTION;
SQL 语句
[COMMIT/ROLLBACK];
MySQL:事务机制的更多相关文章
- MySQL事务机制
事务机制的特性通常被概括为"ACID原则" A(Atomic) 原子性: 构成一个事务的所有语句应该是一个独立的逻辑单元,要么全部执行成功, 要么一个都不成功, 你不能只执行他们当 ...
- MySQL 事务机制
事务处理是保证数据安全的重要机制,事务有四个重要属性 ,根据它们的英文名称可以记为ACID: 原子性(Atomic): 事务操作是不可分割的; 事务只存在已执行和未执行两种状态,不存在只执行了部分指令 ...
- Mysql 预查询处理 事务机制
预处理 PDO支持sql预处理功能,可以有效的防止sql注入的问题 例如: 以下操作会导致数据表中所有数据删除 $host = 'localhost'; $port = 3306; $dbname = ...
- MySQL事务、并发问题、锁机制
MySQL事务,并发问题,锁机制 1.什么是事务 事务是一条或多条数据库操作语句的组合,具备ACID,4个特点. 原子性:要不全部成功,要不全部撤销 隔离性:事务之间相互独立,互不干扰 一致性:数据库 ...
- MySQL事务及事务隔离级别 锁机制
什么是事务? 当多个用户访问同一份数据时,一个用户在更改数据的过程中可能有其他用户同时发起更改请求,为保证数据库记录的更新从一个一致性状态更改为另一个一致性状态,这样的操作过程就是事务.事务具有的AC ...
- Mysql事务隔离级别和锁机制
一.Spring支持四种事务隔离级别: 1.ISOLATION_READ_UNCOMMITTED(读未提交):这是事务最低的隔离级别,它充许令外一个事务可以看到这个事务未提交的数据. 2.ISOLAT ...
- MySQL事务、锁机制、查询缓存
MySQL事务 何为事务? 事务(Transaction)是访问并可能更新数据库中各种数据项的一个程序执行单元(unit). 一个事务可以是一条SQL语句,一组SQL语句或整个程序. 事务的特性: 事 ...
- mysql锁机制和事务隔离
mysql事务 1.InnoDB事务原理 事务(Transaction)是数据库区别于文件系统的重要特性之一,事务会把数据库从一种一致性状态转换为另一种一致性状态. 在数据库提交时,可以确保要么所有修 ...
- MySQL的事务机制和锁(InnoDB引擎、MVCC多版本并发控制技术)
一.事务(数据库的事务都通用的定义) 1.1 事务定义 事务是由一步或几步数据库操作序列组成逻辑执行单元,这系列操作要么全部执行,要么全部放弃执行.事务通常以 BEGIN TRANSACTION 开始 ...
随机推荐
- hdu5886Tower Defence(树形dp)
Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submission ...
- 【poj 1988】Cube Stacking(图论--带权并查集)
题意:有N个方块,M个操作{"C x":查询方块x上的方块数:"M x y":移动方块x所在的整个方块堆到方块y所在的整个方块堆之上}.输出相应的答案. 解法: ...
- 1569: Wet Tiles
Description Alice owns a construction company in the town of Norainia, famous for its unusually dry ...
- Codeforces Round #687 (Div. 2, based on Technocup 2021 Elimination Round 2) C. Bouncing Ball (后缀和,枚举)
题意:有一长度为\(n\)的平台,平台有的位置有木桩,可以使小球弹起来,小球必须从第\(p\)个位置开始,而且每次都会向右弹\(k\)个单位,然后有的位置是没有木桩的,你可以在这些的空的位置放一个木桩 ...
- 解决M1 MacBook无法使用pip安装Numpy
问题描述 Python官方已发布支持M1 Apple Silicon的版本,但是在使用pip包管理工具安装一些依赖时发生了错误,这里面就包括在科学计算领域常用的numpy.pandas等.目前可以通过 ...
- 【转】K8S中部署Helm
K8S中的包管理工具 1. 客户端Helm(即Helm) 通过脚本安装:curl https://raw.githubusercontent.com/helm/helm/master/scripts ...
- sdutoj2887
#include <stdio.h> #include <math.h> int main(){ int px,tx;double alpha; int T;scanf(&qu ...
- JWT实现登录认证实例
JWT全称JSON Web Token,是一个紧凑的,自包含的,安全的信息交换协议.JWT有很多方面的应用,例如权限认证,信息交换等.本文将简单介绍JWT登录权限认证的一个实例操作. JWT组成 JW ...
- RT-Thread学习笔记1-启动顺序与线程创建
目录 1. 启动顺序 2. 堆范围 3. 线程创建 3.1 线程代码(入口函数) 3.2 线程控制块 3.3 线程栈 4. 系统滴答时钟 5. GPIO驱动架构操作IO 6. 线程优先级 & ...
- adjust All In One
adjust All In One 调整 https://www.adjust.com/ Maximize the impact of your mobile marketing Adjust is ...