您好、欢迎来到现金彩票网!
当前位置:彩运网 > 封锁粒度 >

MySQL简介之-----事务、并发、锁、隔离

发布时间:2019-07-06 23:51 来源:未知 编辑:admin

  事务指的是满足 ACID 特性的一组操作,可以通过 Commit 提交一个事务,也可以使用 Rollback 进行回滚。

  事务被视为不可分割的最小单元,事务的所有操作要么全部提交成功,要么全部失败回滚。

  回滚可以用日志来实现,日志记录着事务所执行的修改操作,在回滚时反向执行这些修改操作即可。

  数据库在事务执行前后都保持一致性状态。在一致性状态下,所有事务对一个数据的读取结果都是相同的。

  一旦事务提交,则其所做的修改将会永远保存到数据库中。即使系统发生崩溃,事务执行的结果也不能丢失。

  可以通过数据库备份和恢复来实现,在系统发生崩溃时,使用备份的数据库进行数据恢复。

  事务的 ACID 特性概念简单,但不是很好理解,主要是因为这几个特性不是一种平级关系:

  MySQL 默认采用自动提交模式。也就是说,如果不显式使用START TRANSACTION语句来开始一个事务,那么每个查询都会被当做一个事务自动提交。

  T1 和 T2 两个事务都对一个数据进行修改,T1 先修改,T2 随后修改,T2 的修改覆盖了 T1 的修改。

  T1 修改一个数据,T2 随后读取这个数据。如果 T1 撤销了这次修改,那么 T2 读取的数据是脏数据。

  T2 读取一个数据,T1 对该数据做了修改。如果 T2 再次读取这个数据,此时读取的结果和第一次读取的结果不同。

  T1 读取某个范围的数据,T2 在这个范围内插入新的数据,T1 再次读取这个范围的数据,此时读取的结果和和第一次读取的结果不同。

  产生并发不一致性问题主要原因是破坏了事务的隔离性,解决方法是通过并发控制来保证隔离性。并发控制可以通过封锁来实现,但是封锁操作需要用户自己控制,相当复杂。数据库管理系统提供了事务的隔离级别,让用户以一种更轻松的方式处理并发一致性问题。

  我们都知道锁的种类一般分为乐观锁和悲观锁两种,InnoDB 存储引擎中使用的就是悲观锁,而按照锁的粒度划分,也可以分成行锁和表锁。

  乐观锁和悲观锁其实都是并发控制的机制,同时它们在原理上就有着本质的差别;

  乐观锁是一种思想,它其实并不是一种真正的『锁』,它会先尝试对资源进行修改,在写回时判断资源是否进行了改变,如果没有发生改变就会写回,否则就会进行重试,在整个的执行过程中其实都

  悲观锁就是一种真正的锁了,它会在获取资源前对资源进行加锁,确保同一时刻只有有限的线程能够访问该资源,其他想要尝试获取资源的操作都会进入等待状态,直到该线程完成了对资源的操作并且释放了锁后,其他线程才能重新操作资源;

  虽然乐观锁和悲观锁在本质上并不是同一种东西,一个是一种思想,另一个是一种真正的锁,但是它们都是一种并发控制机制。

  乐观锁不会存在死锁的问题,但是由于更新后验证,所以当冲突频率和重试成本较高时更推荐使用悲观锁,而需要非常高的响应速度并且并发量非常大的时候使用乐观锁就能较好的解决问题,在这时使用悲观锁就可能出现严重的性能问题;在选择并发控制机制时,需要综合考虑上面的四个方面(冲突频率、重试成本、响应速度和并发量)进行选择。

  应该尽量只锁定需要修改的那部分数据,而不是所有的资源。锁定的数据量越少,发生锁争用的可能就越小,系统的并发程度就越高。

  但是加锁需要消耗资源,锁的各种操作(包括获取锁、释放锁、以及检查锁状态)都会增加系统开销。因此封锁粒度越小,系统开销就越大。

  一个事务对数据对象 A 加了 X 锁,就可以对 A 进行读取和更新。加锁期间其它事务不能对 A 加任何锁。

  一个事务对数据对象 A 加了 S 锁,可以对 A 进行读取操作,但是不能进行更新操作。加锁期间其它事务能对 A 加 S 锁,但是不能加 X 锁。

  简单来说,S锁与S锁能共存(读之间互不影响),X锁(写锁)出现时,所有锁都要等待。

  使用意向锁(Intention Locks)可以更容易地支持多粒度封锁。

  在存在行级锁和表级锁的情况下,事务 T 想要对表 A 加 X 锁,就需要先检测是否有其它事务对表 A 或者表 A 中的任意一行加了锁,那么就需要对表 A 的每一行都检测一次,这是非常耗时的。

  意向锁在原来的 X/S 锁之上引入了 IX/IS,IX/IS 都是表锁,用来表示一个事务想要在表中的某个数据行上加 X 锁或 S 锁。有以下两个规定:

  通过引入意向锁,事务 T 想要对表 A 加 X 锁,只需要先检测是否有其它事务对表 A 加了 X/IX/S/IS 锁,如果加了就表示有其它事务正在使用这个表或者表中某一行的锁,因此事务 T 加 X 锁失败。

  可以解决丢失修改问题,因为不能同时有两个事务对同一个数据进行修改,那么事务的修改就不会被覆盖。

  在一级的基础上,要求读取数据 A 时必须加 S 锁,读取完马上释放 S 锁。

  可以解决读脏数据问题,因为如果一个事务在对数据 A 进行修改,根据 1 级封锁协议,会加 X 锁,那么就不能再加 S 锁了,也就是不会读入数据。

  在二级的基础上,要求读取数据 A 时必须加 S 锁,直到事务结束了才能释放 S 锁。

  可以解决不可重复读的问题,因为读 A 时,其它事务不能对 A 加 X 锁,从而避免了在读的期间数据发生改变。

  可串行化调度是指,通过并发控制,使得并发执行的事务结果与某个串行执行的事务结果相同。

  事务遵循两段锁协议是保证可串行化调度的充分条件。例如以下操作满足两段锁协议,它是可串行化调度。

  MySQL 的 InnoDB 存储引擎采用两段锁协议,会根据隔离级别在需要的时候自动加锁,并且所有的锁都是在同一时刻被释放,这被称为隐式锁定。

  一个事务只能读取已经提交的事务所做的修改。换句话说,一个事务所做的修改在提交之前对其它事务是不可见的。

  丢失修改问题在什么情况下不影响数据库的一致性?在什么情况下影响数据库的一致性?看到这个问题的第一反应,影响数据库的并发一致性不是有四种吗?丢失修改、读脏数据、不可重复读、幻影读怎么问什么时候影响,什么...博文来自:lph-China的博客

  事务和线程的区别还有事务并发执行引起的四个问题:丢失修改、脏读、不可重复读,幻读...博文来自:李意文的博客

  常见并发并发一致性问题包括:丢失的修改、不可重复读、读脏数据、幻影读(幻影读在一些资料中往往与不可重复读归为一类)。丢失修改下面我们先来看一个例子,说明并发操作带来的数据的不一致性问题。考虑飞机订票系...博文来自:shixiaoguo90的专栏

  脏读又称无效数据的读出,是指在数据库访问中,事务T1将某一值修改,然后事务T2读取该值,此后T1因为某种原因撤销对该值的修改,这就导致了T2所读取到的数据是无效的。脏读就是指当一个事务正在访问数据,并...博文来自:shuhuai007的专栏

  一、首先了解什么是事务1、事务概念:事务是包含了一组有序的数据库操作命令的序列,它是数据库并发操作的最小控制单位。2、事务特性:原子性:事务包含的数据库操作命令要么都执行,要么都不执行。一致性:当事务...博文来自:Leeon的博客

  事务隔离级别是并发控制的整体解决方案,其实际上是综合利用各种类型的锁和行版本控制,来解决并发问题。锁是数据库并发控制的内部机制,是基础。当然,数据库同时还会利用行版本控制(SQL Server 200...博文来自:caomiao2006的专栏

  Mysql事务隔离级别事务MySQL事务事务定义:事务就是一组原子性的sql查询,或者说一个独立的工作单元。即事务内的sql语句,要么全部执行成功,要么全部执行失败;事务的ACID概念:原子性auto...博文来自:xiancaione的专栏

  脏读、幻读、不可重复读脏读dirtyread脏读是指在一个事务处理过程里读取了另一个未提交的事务中的数据。不可重复读nonrepeatableread是指在一个事务内,多次读同一数据。在这个事务还没有...博文来自:master-dragon的专栏

  并发操作带来数据不一致性包括:丢失修改、不可重复读、读脏数据1.丢失修改两个事务T1和T2读入同一数据并修改,T2提交的结果破坏了T1提交的结果,导致T1的修改被丢失2.不可重复读不可重复读是指事务T...博文来自:的博客

  更新丢失:如果多个线程操作,基于同一个查询结构对表中的记录进行修改,那么后修改的记录将会覆盖前面修改的记录,前面的修改就丢失掉了,这就叫做更新丢失。Serializable可以防止更新丢失问题的发生。...博文来自:的博客

  并发事务的丢失更新及其处理方式  在事务的隔离级别内容中,能够了解到两个不同的事务在并发的时候可能会发生数据的影响。细心的话可以发现事务隔离级别章节中,脏读、不可重复读、幻读三个问题都是由事务A对数据...博文来自:郑学炜的技术博客

  博文来自:技术就是个纸老虎---为之,则难者亦易矣;不为,则易者亦难矣。

  1、数据库的脏读:A事务读取了B事务尚未提交的更改数据,并在这个读取的脏数据上进行操作。如果这时B事务恰巧进行了回滚事务,那么A事务读取的事务是不被承认的。如下取款事务和转账事务2、不可重复读:是指A...博文来自:seeker520的博客

  数据库的事务有几种特性,例如一致性和隔离性,一般通过加锁来实现。同时数据库又是一个高并发的应用,如果加锁过度或者不当将严重影响性能。数据库提供了几种隔离级别来供选择,本文通过解析InnoDB的加锁机制...博文来自:ends coding life

  当一个系统访问量上来的时候,不只是数据库性能瓶颈问题了,数据库数据安全也会浮现,这时候合理使用数据库锁机制就显得异常重要了。本系列:demo下载(一)MySQL优化笔记(一)–库与表基本操作以及数据增...博文来自:Jack__Frost的博客

  TiDB作为新一代分布式SQL数据库,它支持强一致性事务。ANSISQL-92对于事务的隔离级别有明确的定义,这也是大部分传统数据库(MySQL、PostgreSQL、Oracle、DB2、S...博文来自:“IT-老兵” 的博客

  相关文章:深入理解Mysql——高性能索引与高性能SQL深入理解Mysql——锁、事务与并发控制(辟谣)深入理解Mysql——schema设计与大表alter操作mysqlexplain-output...博文来自:张硕的博客

  MySQL数据库的事务隔离级别相信很多同学都知道.大家有没有想过它是如何实现的呢?带着这些问题我翻阅了相关数据库的书籍和资料,把我的理解写下来.一:事务隔离级别mysql数据库的隔离界别如下:1,RE...博文来自:北漂码农

  InnoDb和MyISAM的主要区别:MyISAM支持表锁,不支持事务,支持全文索引,默认表类型oDb支持行锁,支持事务,不支持全文索引(但可以用sphinx分词索引); 锁介绍(大概):行锁...博文来自:SSS_VIP的博客

  1、背景:现在有这样的需求,插入数据时,判断test表有无username为‘mraz’的数据,无则插入,有则提示“已插入”,目的就是想只插入一条username为‘mraz’的记录。2、一般程序逻辑...博文来自:断线的风筝

  此方法可能不太完美,但是能在一定程度上解决高并发问题。本文以高并发抢单来举例。首先科普一下mysql隔离级别mysql有四个隔离级别:ReadUncommitted(读取未提交内容)ReadCommi...博文来自:Dont lost way

  数据库事务隔离级别与数据库锁:在数据库中,存在四种数据库隔离级别,分别是1、readuncommited在当前事务未提交的时候其他事务能够读到当前事务写的内容,这种隔离级别会导致脏读。其具体的加锁方式...博文来自:u012068323的博客

  1、背景:现在有这样的需求,插入数据时,判断test表有无username为‘mraz’的数据,无则插入,有则提示“已插入”,目的就是想只插入一条username为‘mraz’的记录。2、一般程序逻辑...博文来自:mlx212的专栏

  多事务运行并发问题在实际应用中,往往是一台(或多台)服务器向无数客户程序提供服务,当服务器查询数据库获取数据时,如果没有采用必要的隔离机制,可能会存在数据库事务的并发问题,下面是一些常见的并发问题分类...博文来自:总结沉淀

  用MySQL客户端模拟并发事务操作数据时,如下表按照时间的先后顺序执行命令,会导致死锁。数据库数据如下select*froma;+----+id+----+3+----+8+----+1...博文来自:p7+的博客

  我们对数据库的操作通常为写和读,就是所说的CRUD:增加(Create)、读取(Read)、更新(Update)和删除(Delete)。事务就是一件完整要做的事情。事务是恢复和并发控制的基本单位。事务...博文来自:Study Notes

  转载:事务处理简单介绍事务处理:MySQL 事务主要用于处理操作量大,复杂度...博文来自:wickedvalley

  1、数据库事务1.1数据库事务(DatabaseTransaction),是指作为单个逻辑工作单元执行的一系列操作。1.2事务的4个特性(ACID):(1)原子性(atomic)(atomicity)...博文来自:单炒饭

  事务ACID特性,其中I代表隔离性(Isolation)。 什么是事务的隔离性?隔离性是指,多个用户的并发事务访问同一个数据库时,一个用户的事务不应该被其他用户的事务干扰,多个并发事务之间要相互隔离。...博文来自:小白的进化史

  MySQL常见面试题1.主键超键候选键外键主键:数据库表中对储存数据对象予以唯一和完整标识的数据列或属性的组合。一个数据列只能有一个主键,且主键的取值不能缺失,即不能为空值(Null)。超键:在关系中...博文来自:的博客

  mysqlInnodb解决各个不同事物隔离级别所产生问题的方法。博文来自:黑伯的博客小站

  面试题:事务并发可能会导致哪些问题,数据库的隔离级别有哪些,mysql默认的是哪种级别,这种默认的隔离级别能够避免哪些问题?一、不考虑隔离性,事务存在3种并发访问问题:1、脏读:B事务读取到了A事务尚...博文来自:FREE SOLO

  前言:我们都知道事务的几种性质,数据库为了维护这些性质,尤其是一致性和隔离性,一般使用加锁这种方式。同时数据库又是个高并发的应用,同一时间会有大量的并发访问,如果加锁过度,会极大的降低并发处理能力。所...博文来自:x_i_y_u_e的专栏

  上一篇讲到事务的四大特性,其中有一个是事务的隔离性,即两个事物之间不会互相影响,为了实现这样的功能,就引入了事务的隔离性。事务的隔离性为了保证事务的隔离性,自然我们可以把事务设计成单线程的,这样的话效...博文来自:一些奇奇怪怪的解法

  数据库事务事务(Transaction)是并发控制的基本单位。所谓的事务,它是一个操作序列,这些操作要么都执行,要么都不执行,它是一个不可分割的工作单位。(数据库引擎innoDB是支持事务的(默认每一...博文来自:sinat_38972110的博客

  TiDB支持ANSISQL-92标准中的“读已提交”和“可重复读”两种事物隔离级别。对于“可重复读”隔离级别,在TiDB中叫做“SnapshotIsolation”(快照隔离级别,简称SI),这...博文来自:“IT-老兵” 的博客

  1.锁的分类(一次封锁或两段锁)a.一次封锁就是在方法的开始阶段,已经预先知道要用到那些数据,在方法开始之前就将这些数据用锁锁住,在方法执行完成之后,再全部解锁。这种方式可以有效的避免死锁,但是这种封...博文来自:勤奋的asialee的博客

  MySQL数据库1.常用基础SQL数据库常用语句2.优化事项1.对查询进行优化,应尽量避免全表扫描,首先应考虑在where及orderby涉及的列上建立索引。2.应尽量避免在where子句中对字段...博文来自:开发猫

  一、事务的4大特性(ACID)1.原子性(Atomicity):事务是数据库的逻辑工作单位,它对数据库的修改要么全部执行,要么全部不执行。2.一致性(Consistemcy):事务前后,数据库的状态都...博文来自:犁叔的博客

  最近很多人问,如何将内网的摄像机流媒体数据发布到公网,如果用公网与局域网间的端口映射方式太过麻烦,一个摄像机要做一组映射,而且不是每一个局域网都是有固定ip地址,即使外网主机配置好了每一个摄像机的映射...博文来自:Babosa的专栏

  一、图像内插-最近邻内插法 1、数学原理      当一幅二维数字图像从源图像N*M被放为(j*N) * (k*M)目标图像是,参照数学斜率计算公式      必然有: (X1 – Xmin)/...博文来自:清风似水流的专栏

  帐号相关流程注册范围 企业 政府 媒体 其他组织换句话讲就是不让个人开发者注册。 :)填写企业信息不能使用和之前的公众号账户相同的邮箱,也就是说小程序是和微信公众号一个层级的。填写公司机构信息,对公账...博文来自:小雨同学的技术博客

  本文介绍了如何在超图桌面平台通过倾斜摄影模型提取DSM、DOM数据。博文来自:SuperMap技术控

  LCD RGB 控制技术讲解 — 时钟篇(上)个人笔记,欢迎转载,请注明出处,共同分享 共同进步 博文来自:人有三样东西是无法隐瞒的,咳嗽,穷困和爱,你想隐瞒越欲盖弥彰

  mybatis简单的CURD就不用多说了,网上相关博客文档一大堆。分析一下Mybatis里面的collection聚集查询。 假设一个班级有多名学生为例,通过班级号查询出该班级的信息,和班级里面的所...博文来自:minpann的博客

http://funnyland.net/fengsuolidu/557.html
锟斤拷锟斤拷锟斤拷QQ微锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷微锟斤拷
关于我们|联系我们|版权声明|网站地图|
Copyright © 2002-2019 现金彩票 版权所有