MySQL 学习(三)事务学习
事务隔离级别
SQL标准的事务隔离级别包括:读未提交(read uncommitted)、读提交(read committed)、可重复读(repeatable read)和串行化(serializable )。
- 读未提交是指,一个事务还没提交时,它做的变更就能被别的事务看到。
- 读提交是指,一个事务提交之后,它做的变更才会被其他事务看到。
- 可重复读是指,一个事务执行过程中看到的数据,总是跟这个事务在启动时看到的数据是一致的。当然在可重复读隔离级别下,未提交变更对其他事务也是不可见的。
- 串行化,顾名思义是对于同一行记录,“写”会加“写锁”,“读”会加“读锁”。当出现读写锁冲突的时候,后访问的事务必须等前一个事务执行完成,才能继续执行。
例子和解释
例子中的 v1 ,v2,v3 应该是多少呢?答案是 1,1,2 这就是可重复读,即是value 在另外的事务中被更新了,当前事务是不会影响的,之后提交事务后才会最新的值,那么我们的第一感觉是MySQL中是不是帮我们保存了之前的数值,如果是那样的话,数据库岂不是要占用大量的空间?我们下面来看一下数据库中是如何实现的。
MVCC
下图可以看到,假如我我们上面更新的value 现在为 4 ,那么它从0到4之间的更新(逻辑过程,而不是记录数值)过程实际都被记录在回滚日志中,同一条记录在系统中可以存在多个版本,就是数据库的多版本并发控制(MVCC)。对于read-view A,要得到1,就必须将当前值依次执行图中所有的回滚操作得到。,而每个开启的事务形成了一个 read view的视图,例如图中的视图A ,视图B ,于是视图A 看到的 value 此时为 1 ,假如之后视图A 提交了事务,那么R1 将会被回收,而R3由于之前还存在视图B,那么 R2 ,R3 都不会给回收。
回收的时机 : 当系统里没有比这个回滚日志更早的read-view的时候。
不建议开启长事务连接的原因就是当开启长事务连接后,该事务就会长时间保持,那么回滚日志就会越来越大。
开启事务的方式
两种 :
- 显式启动事务语句,begin或者start transaction,提交commit,回滚rollback;
- set autocommit=0
参考资料
- MySQL实战45讲
MySQL 学习(三)事务学习的更多相关文章
- Redis 学习(三) —— 事务、消息发布订阅
一.Redis事务 Redis 提供的事务机制与传统的数据库事务有些不同,传统数据库事务必须维护以下特性:原子性(Atomicity), 一致性(Consistency),隔离性(Isolation) ...
- redis深入学习(三)-----事务、主从复制、jedis
reids事务 概念 可以一次执行多个命令,本质是一组命令的集合.一个事务中的所有命令都会序列化,按顺序地串行化执行而不会被其它命令插入,不许加塞 作用 一个队列中,一次性.顺序性.排他性的执行一系列 ...
- java_web学习(三) eclipse_jsp学习
1.首先打开eclipse,新建一个Dynamac web project项目文件 2.在WebContent单击右键创建JSP File 3.过程 4.简单的jsp代码 运行结果: 5.导出war文 ...
- Html学习(三) 分类学习
代码: <h1>这是一级分类吗</h1> <h2>这是二级分类吗</h2> <h3>这是三级分类吗 </h3> 效果: 介绍: ...
- MySQL实战45讲学习笔记:第三十九讲
一.本节概况 MySQL实战45讲学习笔记:自增主键为什么不是连续的?(第39讲) 在第 4 篇文章中,我们提到过自增主键,由于自增主键可以让主键索引尽量地保持递增顺序插入,避免了页分裂,因此索引更紧 ...
- PHP的学习--连接MySQL的三种方式
记录一下PHP连接MySQL的三种方式. 先mock一下数据,可以执行一下sql. /*创建数据库*/ CREATE DATABASE IF NOT EXISTS `test`; /*选择数据库*/ ...
- MySQL事务学习-->隔离级别
MySQL事务学习-->隔离级别 6 事务的隔离级别 设置的目的 在数据库操作中,为了有效保证并发读取数据的正确性,提出的事务隔离级别. 数据库是要被广大客户所共享访问的,那么在数据库操作过程中 ...
- MySQL学习笔记-事务相关话题
事务机制 事务(Transaction)是数据库区别于文件系统的重要特性之一.事务会把数据库从一种一致状态转换为另一个种一致状态.在数据库提交工作时,可以确保其要么所有修改都已经保存了,要么所有修改都 ...
- MySQL学习——管理事务
MySQL学习——管理事务 摘要:本文主要学习了使用DCL语句管理事务的操作. 了解事务 什么是事务 事务是一组逻辑处理单位,可以是执行一条SQL语句,也可以是执行几个SQL语句. 事务用来保证数据由 ...
- Mysql事务学习笔记
Mysql事务学习笔记 1.事务概述 事务是数据库的执行单元,它包含了一条或多条sql语句,进行的操作是要么全部执行,要么全部都不执行. 2.事务执行命令 语法格式: start transactio ...
随机推荐
- JQuery函数 $.ajax()
ajax() 方法通过 HTTP 请求加载远程数据 该方法是 jQuery 底层 AJAX 实现.简单易用的高层实现见 $.get, $.post 等.$.ajax() 返回其创建的 XMLHttpR ...
- Facebook Create Done!
前天,又一次开了VPN,建立了自己的Facebook! Facebook我用邮箱注册的,注册邮箱在这里: acmit1966@outlook.com Facebook上我就叫做 Jack Deng 在 ...
- Codeforces1295D. Same GCDs (欧拉函数)
https://codeforces.com/contest/1295/problem/D 设gcd(a,m)= n,那么找gcd(a +x ,m)= n个数,其实就等于找gcd((a+x)/n,m/ ...
- android 如何查看socket、websocket通信数据 抓包
怎么使用可以自行百度
- VSCode C语言编程(一)环境搭建
1.安装Visual Studio Code 2. 安装MinGW编译器 有两种方法 方法(1) 打开https://sourceforge.net/projects/mingw-w64/files/ ...
- 题解【洛谷P1983】[NOIP2013]车站分级
题面 题解 不难想到拓扑排序 于是每一个等级高的向等级低的连一条边 考虑拓扑排序过程中的分层 对于每个点进行分层 于是答案就是这些点中的最大层数 然后就会RE 发现我们多连了一些重复的边 用一个标记数 ...
- 实用 docker history
关闭安装认证, 开启tcp 端口 sudo vi /usr/lib/systemd/system/docker.service ExecStart=/usr/bin/dockerd --insecur ...
- 《TCP/IP入门经典》摘录--Part 2
TCP/IP协议系统 1.网络访问层 网卡(network adapter),即网络接口板,又称网络适配器或NIC (网络接口控制器),是一块被设计用来允许计算机在计算机网络上进行通讯的计算机硬件,由 ...
- 剑指offer 面试题. 二叉搜索树的第k个结点
题目描述 给定一棵二叉搜索树,请找出其中的第k小的结点.例如, (5,3,7,2,4,6,8) 中,按结点数值大小顺序第三小结点的值为4. 解: 由于二叉搜索树的中序遍历是升序,所以在中 ...
- Linux下run文件的直接运行
比如realplay.run 安装方法如下 chmod +x realplay.run ./realplay.run 然后他就会执行安装了,在过程中可能会要求你输入yes或no 安装完后就可以用了 , ...