当前位置: 首页 > news >正文

保健品做哪个网站好网站建设投资规划

保健品做哪个网站好,网站建设投资规划,上海闵行区,怎样在微信上制作自己的链接首先我们要明确#xff0c;加锁的对象是索引#xff0c;加锁的基本单位是next-key lock#xff0c;由记录锁和间隙锁组成。next-key是前开后闭区间#xff0c;间隙锁是前开后开区间。根据不同的查询条件next-key 可能会退化成记录锁或间隙锁。 在能使用记录锁或者间隙锁就…首先我们要明确加锁的对象是索引加锁的基本单位是next-key lock由记录锁和间隙锁组成。next-key是前开后闭区间间隙锁是前开后开区间。根据不同的查询条件next-key 可能会退化成记录锁或间隙锁。 在能使用记录锁或者间隙锁就能避免幻读现象的场景下 next-key lock 就会退化成记录锁或间隙锁。 数据准备 CREATE TABLE user ( id bigint NOT NULL AUTO_INCREMENT, name varchar(30) COLLATE utf8mb4_unicode_ci NOT NULL, age int NOT NULL, PRIMARY KEY (id), KEY index_age (age) USING BTREE ) ENGINEInnoDB DEFAULT CHARSETutf8mb4 COLLATEutf8mb4_unicode_ci; 唯一索引等值查询 本案例其实就是在主键索引上进行等值查询取决于查询记录是否存在存在退化成记录锁否则就是在索引树中找到第一个大于该查询记录的记录后将改记录的索引中的next-key lock退换成间隙锁。 记录存在 当执行如下 id1的锁会给id1的记录jiashangX型的记录锁 BEGIN; SELECT * from user where id 1 for update;可以发现对id1的记录加了记录锁。update user set age 25 where id 1; DELETE FROM user WHERE id 1; 语句都会被阻塞。 图中 LOCK_TYPE 中的 RECORD 表示行级锁而不是记录锁的意思 通过 LOCK_MODE 可以确认是 next-key 锁还是间隙锁还是记录锁 如果 LOCK_MODE 为 X说明是next-key 锁 如果 LOCK_MODE 为 X, REC_NOT_GAP说明是记录锁 如果 LOCK_MODE 为 X,GAP说明是间隙锁 这里简单聊下为什么唯一索引下等值查询就可以将next-key lock退化成记录锁因为对指定行的操作加锁可以直接避免其他事务对该行的删除、插入的时候就可以避免幻读问题。 记录不存在 好了上面主要说的是针对记录存在针对记录不存在的唯一索引添加锁。 BEGIN; SELECT * from user where id 2 for update;当LOCK_MODE是间隙锁或者Next-key LOCK时LOCK_DATA代表的就是锁的右边界锁的左边界就是表中id为5的上一条记录的id值也就是1所以本次间隙锁的范围就是(1,5)。当执行INSERT INTOtest.user (id, name, age) VALUES (3, zhangsan2, 21); 会获取锁失败阻塞。 这里由一个疑问就是为什么唯一索引记录不存在的情况下会从next-key lock退化成间隙锁。 其实这种情况仅靠间隙锁就能解决。幻读的问题。 为什么不可以针对不存在的记录加记录锁锁是加在索引上的记录不存在自然没办法锁住这条不存在的记录。 唯一索引范围查询 针对唯一索引范围查询会对扫描到的索引加next-key锁 大于或者大于等于的范围查询 情况1:针对大于等于的范围查询存在等值条件那么该记录索引中的next-key 退化成记录锁。 BEGIN; SELECT * from user where id 15 for update;1.首先找到的是id20这一行然后对该(15,20] 添加间隙锁。 2.由于是范围查询innodb存储引擎中有特殊的记录标识最后一条记录。supremum pseudo-record 所以扫描第二行的时候加的是(20,8]的next- key 当对 16 17 18 19 20 以及20以上的记录进行删除 更新 插入操作时会被阻塞。 情况 BEGIN; SELECT * from user where id 15 for update;从图中可以看到加了三个锁由于可以定位到id15这样记录所以针对ID15的记录添加的就是记录锁而接着扫描的就是20这行记录对(15,20] 加间隙锁(20,8)加间隙锁。 从本案例中可以获取当大于等于时如果有等于就会针对等于的记录加记录锁。 小于或者小于等于的范围查询 BEGIN; SELECT * from user where id 6 for update;针对「小于或者小于等于」的唯一索引范围查询如果条件值的记录不在表中那么不管是「小于」还是「小于等于」的范围查询扫描到终止范围查询的记录时该记录中索引的 next-key 锁会退化成间隙锁其他扫描的记录则是在这些记录的索引上加 next-key 锁。 情况 BEGIN; SELECT * from user where id 5 for update;非唯一索引等值查询 对非唯一索引进行等值查询的时候因为存在两个索引一个是主键索引一个是二级索引。所以在加锁时同时对这两个索引都加锁。但是对主键索引加锁的时候只有满足查询条件的记录才会对主键索引加锁。 非唯一性 二级索引、主键索引都加锁 主键索引查询 只针对主键索引加锁 没有加索引的查询 如果锁定读查询语句没有使用索引列作为查询条件或者查询语句没有走索引查询导致扫描是全表扫描。那么每一条记录的索引上都会加 next-key 锁这样就相当于锁住的全表这时如果其他事务对该表进行增、删、改操作的时候都会被阻塞。 update和delete语句如果查询条件不加索引扫描方式也是全表扫描对每一条记录加next-key 锁相当于锁住的全表。 BEGIN; SELECT * from user where name qxlxi for update;update user set age age 1 WHERE name qxlxi;DELETE FROM user WHERE name qxlxi;select * from performance_schema.data_locks;在线上在执行 update、delete、select … for update 等具有加锁性质的语句一定要检查语句是否走了索引如果是全表扫描的话会对每一个索引加 next-key 锁相当于把整个表锁住了 小结 本篇主要从实操方面介绍是如何针对不同的查询条件进行加锁。当查询条件是主键索引、普通索引 会出现各种不同的情况但是总体上其实主要解决的就是通过next-key lock、gap lockrecord lock取避免可能出现幻读的情况。 原则 1加锁的基本单位是 next-key locknext-key lock 是前开后闭区间。 原则 2查找过程中访问到的对象才会加锁。 优化 1索引上的等值查询给唯一索引加锁的时候next-key lock 退化为行锁。 优化 2索引上的等值查询向右遍历时且最后一个值不满足等值条件的时候next-key lock 退化为间隙锁。 一个 bug唯一索引上的范围查询会访问到不满足条件的第一个值为止。
http://www.dnsts.com.cn/news/270685.html

相关文章:

  • 爬虫科技网站建设北京视频网站建设
  • 怎么学好网站开发网站开发包括网站的等过程
  • 网站源码 预览专业做网站电话
  • 可以做推送的网站用 htmi5做网站
  • 怎样给网站做百度推广wordpress 怎么删除主题
  • 网站栏目第1 ppt模板网
  • 做哪类网站赚钱wordpress域名授权破解版
  • 网站开发语言html5 phpwordpress get_pages 输出格式
  • 建设网站用模版网站与网页设计教程
  • 铜山徐州网站开发ppt模板下载免费素材
  • 陕西网站建设排名黄骅港金沙滩门票价格
  • 代做效果图的网站好中信建设有限责任公司内江分公司
  • 丹阳高铁站对面的规划买过域名之前就可以做网站了吗
  • 珠海网站建设网沈阳市建设工程项目管理中心
  • 怀柔富阳网站建设摄影图片素材网站
  • 金鹏建设集团网站做微信公众号微网站
  • 网站站长英语中国最大的网络公司是哪个
  • 自己公司网站设计wordpress编辑文字内容
  • 企业建站业务还能做吗整合网络营销策划
  • 网站标签怎样修改网站建设师要求
  • 怎么选择镇江网站建设wordpress 4.9.7 中文
  • 网站后台地址忘记了网站建设设计哪家好
  • 自助建设响应式网站直播交友app开发
  • 个人网站用移动硬盘做服务器天津做网站选津坤科技
  • 做网站的生产方式网站开发一般用的什么架构
  • 有好点的网站建设公司吗安徽网站备案要多少时间
  • 网站根目录权限设置山西seo排名厂家
  • 长沙做彩票网站公司宝应县天宇建设网站
  • 建网站平台安全性常州广告公司排名
  • 广东建设工程备案网站产品工业设计网站