MySQL 事务隔离
2023-09-14 09:14:49 时间
ACID : 原子(Atomicity)、一致(Consistency)、隔离(Isolation)、永久(Durability)
- 多个事务可能出现问题 : 脏读 (dirty read) , 不可重复读 (non-repeatable read) , 幻读 (phantom read)
事务隔离级别 :
- 读未提交 (read uncommitted) : 事务没提交时,做的变更能被其他事务看到
- 读提交 (read committed) : 事务提交后,做的变更被其他事务看到
- 可重复读 (repeatable read) : 与事务启动时 ,看到的数据一致
- 串行化 (serializable) : 对同一行记录 , 进行读写锁。当读写锁冲突时,后访问的事务要等前个事务执行完成,才能继续执行
隔离级别例子 :
- 读未提交 : V1 = 2 : 事务 B 还没有提交,但能被 A 看到。V2、V3 = 2
- 读提交 : V1 = 1,V2 = 2。事务 B 提交后才能被 A看到。 V3 = 2
- 可重复读 : V1、V2 = 1 : 事务中看到的数据都是一致的。V3 = 2
- 串行化 : 在事务 B 执行
将 1 改成 2
时锁住。直到事务 A 提交后,事务 B 才能执行。V1、V2 =1,V3 = 2
查看隔离级别 :
show variables like 'transaction_isolation';
+-----------------------+----------------+
| Variable_name | Value |
+-----------------------+----------------+
| transaction_isolation | READ-COMMITTED |
+-----------------------+----------------+
事务隔离实现
每条记录在更新时 , 都会记录一条回滚操作
- 记录上的最新值,通过回滚操作,都能得到前一个状态的值
- 数据库的多版本并发控制 (MVCC) : 同一条记录在系统中能存在多个版本
- 当没有事务用到这些回滚日志时 (没有比该回滚日志更早的
read-view
),回滚日志会被删除
事务的启动
事务启动方式 :
- 显式启动事务 :
begin
或start transaction
, 提交 :commit
, 回滚 :rollback
set autocommit=0
: 将该线程的自动提交关掉。该事务只有主动执行commit
或rollback
或断开连接 才结束
注意点 :
- 建议用
set autocommit=1
, 通过显式启动事务 , 避免意外的长事务 - 当连续开启事务用
commit work and chain
(提交事务并自动启动下个事务) : 省了再次执行 begin 的开销
查询长事务 :
select *
from information_schema.innodb_trx
where TIME_TO_SEC(timediff(now(), trx_started)) > 60
相关文章
- 商品库存“存取设计”,MySQL事务、表锁、行锁
- mysql中实现行号,oracle中的rowid
- 事务,Oracle,MySQL及Spring事务隔离级别
- 重新整理 mysql 基础篇————— 事务隔离级别[四]
- [转]MySQL事务学习-->隔离级别
- MySQL的事务隔离级别和锁
- 〖Python 数据库开发实战 - MySQL篇⑤〗- 为大家推荐几款经典的数据库可视化工具
- 〖Python 数据库开发实战 - Python与MySQL交互篇③〗- MySQL Connector的事务控制与异常处理
- Mysql连接报错:1130-host ... is not allowed to connect to this MySql server如何处理
- 详解MySQL information_schema数据库常用的表信息以及各表对应的字段信息;以及如何登录mysql和创建视图
- MySQL字符集编码
- MySQL Study之--Mysql无法启动“mysql.host”
- 【MySQL】我这样分析MySQL中的事务,面试官对我刮目相看!!
- 第31讲:MySQL事务的并发问题以及事务的隔离级别
- 第19讲:MySQL常用的几种流程控制函数以及基本使用
- 【MySQL笔记】mysql来源安装/配置步骤和支持中国gbk/gb2312编码配置
- Groonga开源搜索引擎——列存储做聚合,没有内建分布式,分片和副本是随mysql或者postgreSQL作为存储引擎由MySQL自身来做分片和副本的
- 如何实现MySQL表数据随机读取?从mysql表中读取随机数据
- Mysql原理篇之事务隔离级别和MVCC--13
- mysql数据库之常用SQL语句及事务学习笔记(一)
- MySQL-小章节-事务工作流程原理
- 【Mysql异构实时同步Oracle】OGG12异构同步mysql到oracle(windows mysql实时同步数据到linux oracle)详细文档