MySQL事务以及加锁机制
事务的特征ACID,即原子性、一致性、隔离性、持久性。
原子性保证一个事务为一个最小的单元,内部不可分割;
一致性保证事务中的每个操作线程不可单独提交,成功则一起提交,不成功则事务回滚;
隔离性保证不同事务间看到的数据视图相互独立,相互隔离(隔离级别可设置);
持久性保证事务提交后数据会持久的保存下来;
sql规范定义的事务的隔离级别:
1.READ UNCOMMITTED(读取未提交内容)
所有事务可以看到未提交事务的执行结果,本隔离级别很少用到实际应用中,读取未提交的数据,又称为“脏读”。
2.READ COMMITTED(读取提交内容)
大多数数据库的默认隔离级别是此级别,但不是mysql默认的。一个事务在开始的时候只能看见已提交事务所做的改变。一个事务从开始到提交前所做的任何改变都是不可见的,除非提交。这种隔离级别也称为不可重复读。
3.REPEATABLE READ(可重复读)
锁定查询中使用的所有数据以防止其他用户更新数据,但是其他用户可以将新的幻像行插入数据集,且幻像行包括在当前事务的后续读取中 。此级别也称为“幻读”。
4.SERIALIZABLE(可串行化)
可串行化是最高的隔离级别,它通过强制事务排序,使之不可重读,解决了幻读的问题。此隔离级别会在每个读的数据行上加共享锁,使用这种隔离级别会产生大量的超时现象,一般实际开发中不会用到。
mysql加锁机制 :
根据类型可分为共享锁(SHARED LOCK)和排他锁(EXCLUSIVE LOCK)或者叫读锁(READ LOCK)和写锁(WRITE LOCK)。
根据粒度划分又分表锁和行锁。表锁由数据库服务器实现,行锁由存储引擎实现。
mysql提供了3种事务型存储引擎,InnDB、NDB Cluster和Falcon。
一个事务执行的任何过程中都可以获得锁,但是只有事务提交或回滚的时候才释放这些锁。这些都是隐式锁定,也可以显式锁定,InnoDB支持显式锁定,例如:
SELECT .... LOCK IN SHARE MODE (加共享锁)
SELECT .....FOR UPDATE(加排他锁)
多版本并发控制(重要):
Mysql的事务存储引擎不是简单实用行加锁机制,而是叫多版本并发控制(MVCC)技术,和行加锁机制关联实用。以便应对更高的并发,当然是以消耗性能作为代价。
每种存储引擎对MVCC的实现方式不同,InnoDB引擎的简单实现方式如下:
InnoDB通过为每个数据航增加两个隐含值的方式来实现。这两个隐含值记录了行的创建时间,以及过期时间。每一行存储事件发生时的系统版本号。每一次开始一个新事务时版本号会自动加1,每个事务都会保存开始时的版本号,每个查询根据事务的版本号来查询结果。
本文来自:Linux教程网
转载于:https://blog.51cto.com/9626185/1603650
MySQL事务以及加锁机制相关推荐
- Mysql事务以及加锁机制事务的特征ACID
Mysql事务以及加锁机制 事务的特征ACID,即原子性.一致性.隔离性.持久性. 原子性保证一个事务为一个最小的单元,内部不可分割: 一致性保证事务中的每个操作线程不可单独提交,成功则一起提交,不成 ...
- Mysql事务回滚机制与原理
Mysql事务回滚机制与原理 文章目录 Mysql事务回滚机制与原理 一.事务回滚机制 二.使用到的技术讨论 三.redo log和undo log介绍 3.1 redo log 3.2 undo l ...
- mysql事务会不会上锁_MySQL事务以及加锁机制
事务的特征ACID,即原子性.一致性.隔离性.持久性. 原子性保证一个事务为一个最小的单元,内部不可分割: 一致性保证事务中的每个操作线程不可单独提交,成功则一起提交,不成功则事务回滚: 隔离性保证不 ...
- MySQL事务及锁机制大揭秘 - 公开课笔记
Spring事务和数据库事务有什么区别? Spring提供了一个类,由这个类以AOP的方式管理,只需要@Transactional即可 为什么要有事务? 事务的基本概念:要不然全成功,要不然全失败,为 ...
- 工作四年都没搞定的Mysql事务和锁机制,这篇一次讲清!
前言 众所周知,事务和锁是mysql中非常重要功能,同时也是面试的重点和难点.本文会详细介绍事务和锁的相关概念及其实现原理,相信大家看完之后,一定会对事务和锁有更加深入的理解. 什么是事务 在维基百科 ...
- Mysql事务隔离MVCC机制
MVCC是Mysql保证可重复读和读已提交两个级别的隔离性用到的一套机制,串行化执行是通过加锁来实现的,而MVCC机制下在对同一行数据进行读和写时,不会直接加锁互斥. MVCC主要由undo日志版本链 ...
- MySQL事务篇:ACID原则、事务隔离级别及事务机制原理剖析
引言 众所周知,MySQL数据库的核心功能就是存储数据,通常是整个业务系统中最重要的一层,可谓是整个系统的"大本营",因此只要MySQL存在些许隐患问题,对于整个系统而言都是致命的 ...
- 由MySQL加锁机制引发的死锁案例分析
1.死锁案例 --建表 CREATE TABLE t1(`id` int(11) NOT NULL,`value` int(11) NOT NULLPRIMARY KEY (`id`),KEY ` ...
- 揭秘Mysql事务隔离级别之可重复读
揭秘Mysql事务隔离级别之可重复读 1.可重复读的来源 2.何为不可重复读 3.那么可重复读和不可重复读究竟有什么关系呢? 4.模拟不同事务隔离级别对不可重复的处理情况(有线程执行顺序). 4.1. ...
最新文章
- python 监控windows磁盘空间和备份大小
- 特殊格式的 汇潮支付接口对接
- java流读写_java流概述以及文件读写示例
- ar - 创建静态库.a文件
- mybatis-plus实现自定义字段修改数据 后续更新CRUD
- 基于JAVA+SpringMVC+Mybatis+MYSQL的英语在线学习系统
- hdu4857 拓扑排序
- matlab中单独存图_matlab中仅保存plot部分(除去空白)和图像的叠加
- MAC编译OpenJDK8:error: ‘‘ within ‘||‘ [-Werror,-Wlogical-op-parentheses]
- 2020年4月github上最热门项目-python
- 浏览器中网址访问过程解析
- 用 Androidx + 蓝牙HC05 点灯(2): Handler 掌舵人 和 Thread 线人,逮着蓝牙老大说黑话:此灯为我开,101011...
- mysql数据库管理-常用命令总结
- java猫抓老鼠_猫抓老鼠-Java面向对象特点梳理
- 计算机基础知识试题答案6,计算机基础知识试题及答案
- SecureCRT 如何快速执行常用命令
- python 模拟器多开任务并行
- Windows下快速获取一个文件夹下所有文件的名称列表
- shell练习Day1
- ORM进阶之Hibernate中关系映射