范文健康探索娱乐情感热点
投稿投诉
热点动态
科技财经
情感日志
励志美文
娱乐时尚
游戏搞笑
探索旅游
历史星座
健康养生
美丽育儿
范文作文
教案论文
国学影视

mysql专题锁机制

  mysql专题 - 锁机制
  无论是工作还是面试我们都有很多可能性接触mysql。我打算好好梳理一下Mysql的基础,因此打算开启一个专题。有不对的地方也麻烦指正。
  mysql锁进行划分 按照锁的粒度划分:行锁、表锁、页锁 两种思想上的锁:悲观锁、乐观锁。 InnoDB中有几种行级锁类型:Record Lock、Gap Lock、Next-key LockRecord Lock:在索引记录上加锁Gap Lock:间隙锁Next-key Lock:Record Lock+Gap Lock 行锁
  行级锁是颗粒度最细的一种锁,表示对当前操作的行进行加锁。能减少数据操作的冲突,但是加锁开销最大,有可能会出现死锁。行级锁按照使用方式分为共享锁和排他锁。 共享锁(读锁 S锁)事务A对表 T的某一行R进行了( 以下简称TR ) S锁操作,这个时候其他事务只能对 TR加S锁不能加X锁(X锁在下面)。这保证了其他事务可以读,但在A释放TR上的S锁之前不能对TR做任何修改。 -- 加 S 锁示例
  SELECT * FROM tmp_table WHERE id = "3" LOCK IN SHARE MODE; 排它锁(写锁 X锁)事务A对表 TR 做了X锁操作,这个时候其他事务不能对 TR加锁。这保证了其他事务在A释放TR上的锁之前不能再读取和修改TR。排它锁也成为独占锁 -- 加 X 锁
  SELECT * FROM tmp_table WHERE id = "3" for update;
  行级锁是如何引起死锁的呢?
  单表操作的时候是不会引起死锁的,当存在多表关联的时候就有可能产生死锁。 -- 伪代码,  -- 事务1开始 select * from tmp_table where id = "1" for update; select * from tmpA a,tmp_table2 b where a.name = b.name; -- 事务1结束  -- 事务2开始 select * from tmp_table2 where id = "1" for update; select * from tmpA a,tmp_table1 b where a.name = b.name; -- 事务2结束表锁
  表级锁是mysql锁中粒度最大的一种锁,表示当前的操作对整张表加锁。这种锁开销小,不会死锁,但是很容易发生数据操作的冲突。大部分的mysql引擎都支持。MyISAM和InnoDB都支持表级锁,InnoDB默认的是行级锁。
  同样的表锁也分为共享锁和排他锁 --  共享锁 读锁 LOCK TABLE tmp_table READ; -- 排它锁 写锁 LOCK TABLE tmp_table WRITE; -- 解锁 unlock tables;页锁
  页级锁是MySQL中锁定粒度介于行级锁和表级锁中间的一种锁。表级锁速度快,但冲突多。一次锁定相邻的一组记录。BDB支持页级锁。目前我工作中很少是哟个 BDB引擎,因此这部分就不看如何加的了,了解个大概就可以 乐观锁和悲观锁
  首先客观所和悲观锁并仅仅是数据库的概念,很多地方都会有这种概念。
  悲观锁总是把事情想的悲观,在处理数据的时候会认为其他事务会处理自己要处理的数据,就有可能产生错误。为了防止这种情况发生,因此悲观锁在处理数据的时候都是先加锁,加锁成功后在处理自己要处理的事务
  乐观锁则相反,在处理数据的时候乐观的认为不会有其他事务来处理数据,因此先进行数据处理,在最终提交数据的时候检查数据是否冲突。
  从上面的解释来看 悲观锁效率较低(因此持有锁的时间比较长),而且也可能产生死锁,降低了并发量,但是保证了数据的准确性 乐观锁不会产生死锁,相对效率也较高,但是有可能会产生脏数据
  看下mysql中如何模拟悲观锁 -- 取消mysql事务自动提交 set autocommit=0; -- 开始事务 (三者选一就可以) begin;/begin work;/start transaction; -- 加锁操作及事务操作 select ... for update; -- 提交事务 commit;/commit work;   -- 窗口1 set autocommit=0; -- 锁表 select * from tmp_table for update;   -- 窗口2: -- 会显示等待状态,一直到窗口1执行commit提交事务才会出现下面的显示结果 update tmp_table set tmp6="3" WHERE id = "3" ;InnoDB中的锁
  InnoDB锁的特性 在不通过索引条件查询的时候,InnoDB使用的是表锁 MySQL 的行锁是针对索引加的锁,不是针对记录加的锁,所以虽然是访问不同行 的记录,但是如果是使用相同的索引键,是会出现锁冲突的。 表有多个索引的时候,不同的事务可以使用不同的索引锁定不同的行,另外,不论 是使用主键索引、唯一索引或普通索引,InnoDB 都会使用行锁来对数据加锁。 即便在条件中使用了索引字段,但是否使用索引来检索数据是由 MySQL 通过判断不同 执行计划的代价来决定的,如果 MySQL 认为全表扫 效率更高,比如对一些很小的表,它 就不会使用索引,这种情况下 InnoDB 将使用表锁,而不是行锁。 Record Lock
  单条索引上加锁,record lock 永远锁的是索引,而非数据本身,如果innodb表中没有索引,那么会自动创建一个隐藏的聚集索引,锁住的就是这个聚集索引。所以说当一条sql没有走任何索引时,那么将会在每一条聚集索引后面加X锁,这个类似于表锁,但原理上和表锁应该是完全不同的。 Gap Lock
  间隙锁,是在索引的间隙之间加上锁,这是为什么Repeatable Read隔离级别下能防止幻读的主要原因。
  ps:幻读指的是当某个事务在读取某个范围内的记录时,另外一个事务又在该范围内插入了新的记录,当之前的事务再次读取该范围内的记录时,会产生幻行。
  接用网上的例子 mysql> select * from product_copy; +----+--------+-------+-----+ | id | name   | price | num | +----+--------+-------+-----+ |  1 | 伊利   |    68 |   1 | |  2 | 蒙牛   |    88 |   1 | |  6 | tom    |  2788 |   3 | | 10 | 优衣库 |   488 |   4 | +----+--------+-------+-----+ 其中id为主键 num为普通索引 窗口A: mysql> select * from product_copy where num=3 for update; +----+------+-------+-----+ | id | name | price | num | +----+------+-------+-----+ |  6 | tom  |  2788 |   3 | +----+------+-------+-----+ 1 row in set  窗口B: mysql> insert into product_copy values(5,"kris",1888,2); 这里会等待  直到窗口A commit才会显示下面结果 Query OK, 1 row affected  但是下面是不需要等待的 mysql> update product_copy set price=price+100 where num=1; Query OK, 2 rows affected Rows matched: 2  Changed: 2  Warnings: 0 mysql> insert into product_copy values(5,"kris",1888,5); Query OK, 1 row affected
  我们要关注的是索引字段num。通过上面的例子可以发现 num=2是被锁住的,而操作 num = 1 或者 5的都能正常使用。
  即锁的作用是在1,3的间隙之间加上了锁。因此就防止了幻读的产生

夏日如何挑选空气循环扇?三款实测,为你揭晓答案大家好,我是梦想是个猪,今天为大家带来的是三款空气循环扇的横向评测。关于循环扇眼瞅着天气一天天的热了起来,在我们南方,过了五一后,只要天气晴好,家里就得开空调降温了,不然室内温度嗖一句话数码资讯202252中兴Axon40系列预热中兴Axon40系列配备了一颗独立安全芯片(不错嘛)图源中兴手机官微中兴Axon40Pro搭载一亿像素主摄5月9日发布(很期待啊)图源中兴手机官微Steam34寸窄边超宽带鱼屏999元秒杀对于喜爱玩游戏的小伙伴来说,选购一款大尺寸的显示器能够获得更为畅快的游戏体验。今天给大家推荐这款34英寸的带鱼屏显示器,原价为1099元,现在秒杀价只需要999元。这款显示器采用了从快手上买衣服被骗怎么办?剁手报警或者起诉快手买衣服被骗只能自认倒霉,我在那个什么卡卡卖的打底保暖裤,四条四种料还是超薄加沟起线圈,四条都穿不了,两条烂的一条肤色的还有一片黑色的机油印记呢不知道啊?我还没有小白做推广怎么做?可以通过正规短信平台,成本低,效果好。1推广要优化关键词推广商品是否有展现,主要就是看关键词。关键词一定要跟商品精准匹配,且是浅显易懂的,才能让更多买家接受还要注意关键词的搜索频率iPhone14Pro长这样果粉把刘海儿换回来PChome手机频道报道近日有爆料人士根据已知渠道消息,制作了iPhone14Pro的真机图片,从图片中来看,iPhone14Pro将采用全新的屏幕造型设计,通过屏幕挖孔技术来布置央视都劝不住?无视批评疯狂吸血,吃相太难看终将会付出代价01互联网时代带来了什么互联网时代的到来,为我们带来了很多的便利,但同时也让很多人开始质疑,互联网时代的到来究竟是对是错,因为在这个时代之中,发生了太多让人匪夷所思的事情。你能相信一季度河北省1。2万家科技企业获得贷款总额达614亿元河北日报讯(记者王璐丹)从河北省科技厅获悉,今年一季度,河北省科技厅与建设银行工商银行中国银行邮储银行河北银行和华夏银行等6家银行开启新一轮科技企业贷款风险补偿合作,河北省1。2万央行科技创新再贷款发放对象包括国有商业银行股份制商业银行等共21家金融机构央行科技创新再贷款发放对象包括国有商业银行股份制商业银行等共21家金融机构财联社4月28日电,中国人民银行有关负责人表示,科技创新再贷款支持范围包括高新技术企业专精特新中小企业国家谁知道怎么修改微信运动步数?其实很多第三方的微信多开是可以调整的,但是我不确定是否安全,所以不做推荐!微信运动的基本原理是走路时会先有一个向前的加速度再有一个向后的加速度,根据身高体重调整这两次加速度大小和时为农业插上科技翅膀来源经济日报2022年中央一号文件指出,大力推进数字乡村建设,推进智慧农业发展,促进信息技术与农机农艺融合应用。十四五规划和2035年远景目标纲要提出,建设智慧农业,加快推进农业农
小米用户代言人海报发布,一共9位素人小姐姐前段时间小米公司发起我为小米代言活动,最终在本次活动中,小米共招募到9位女性代言人。而在近日这几位代言人也完成了她们在时尚芭莎的首秀。从小米手机官微公布的图片可以看到,这几位代言人微信零钱被法院冻结了怎么办?首先你跟客服那边联系一下,要确定是哪个法院冻结的。然后你到冻结你零钱的这个法院去,查询一下具体的办案法官是谁。和法官联系,看一下是什么原因,你的零钱被冻结了。一般情况下,零钱被法院SoC高通骁龙778G突然发布曝荣耀50系列将首发搭载前两天还有爆料荣耀50系列或首发高通骁龙7系全新SoC,今天高通就悄然发布了这颗全新的SoC骁龙778G处理器。骁龙778G基础规格有6nm工艺制程,CPU为基于A78半定制的Kr任正非布局多年,投万亿的华为2012实验室有多牛?难怪被美国盯上大家有没有听说过华为2012实验室的传闻呢?为什么任正非能投入数千亿的资金,却丝毫没有感到心疼呢?这个2012实验室又是干什么的?它的实力又是如何?接下来,就让小编带领大家一起去探社论全面隔绝虚拟货币暴涨暴跌风险去年下半年以来,以比特币为代表的虚拟货币暴涨暴跌,成交大幅增长,吸引了包括中国交易者在内的全球投资者参与。如何不被虚拟货币暴涨暴跌风险波及,成为监管层十分关注的问题。在央行重申数字马化腾超越钟睒睒再度成为中国首富,发展互联网才是硬道理?关注科技百话,带给你不一样的科技讯息!今天看到一个消息,马化腾又一次成为了中国首富,超越了我们印象中的农夫山泉大王钟睒睒,看到这件事的一瞬间,我第一想法是买矿泉水的比不过搞互联网的腾讯音乐大力投入的长音频业务,怎么样了?看财报图片来源视觉中国5月18日,腾讯音乐发布2021年Q1季度财务数据,此次财报,也是腾讯音乐在汤道生执掌时期的最后一份成绩单。今年4月15日,腾讯音乐刚刚进行了组织架构和人员调整,汤荷兰科学家潘多拉魔盒被美国打开,中国这项技术终将打破垄断b我们大家都知道,我们中国在科技这方面,在近些年的时间里,虽然发展速度比较快,但是在一关键领域,却始终受制于人。面对西方各国对我们中国竖立的科技堡垒,我国科学家并没有放弃,一直在各方德媒中国高科技开始飞跃,15年后将成为世界中心,制定经济标准三年前,中国宣布打造一张用于天基互联网的卫星网络。到2020年底前,中国需发射60颗人造卫星到太空。去年秋季,中国更是细化了这一计划,宣布这一网络需要12992颗卫星。中国制造高科突发!央行发文,中国三大监管机构联手封杀虚拟货币中国基金报泰勒最近,加密货币市场不平静,急涨急跌爆完多头爆空头!一夜暴富一下子就成一夜清零!由于市场传言特斯拉已卖出其所持有的一些比特币资产,比特币等加密货币价格17日显著下跌。每5G年度报告我国5G网络建设已进入高速增长期中新网北京5月18日电(记者刘育英)2021中国5G年度报告预测,我国5G网络建设已进入高速增长期。搜狐科技中国信息通信研究院17日发布了这份报告。报告从5G网络建设技术标准行业应