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

网站如果实现微信支付住房城乡建设厅官方网站

网站如果实现微信支付,住房城乡建设厅官方网站,wordpress企业站源码,建设植绒衣架网站1、InnoDB中的行锁 行锁#xff08;Row Lock#xff09; 也称为记录锁#xff0c;顾名思义#xff0c;就是锁住某一行#xff08;某条记录row#xff09;。需要注意的是#xff0c;MySQL服务器层并没有实现行锁机制#xff0c;行级锁只在存储引擎层实现。 优点#x…1、InnoDB中的行锁 行锁Row Lock 也称为记录锁顾名思义就是锁住某一行某条记录row。需要注意的是MySQL服务器层并没有实现行锁机制行级锁只在存储引擎层实现。 优点锁定力度小发生锁冲突概率低可以实现的并发度高。 缺点对于锁的开销比较大加锁会比较慢容易出现死锁情况。 InnoDB与MyISAM的最大不同有亮点一是支持事务二是采用了行级锁。 1、记录锁Record Locks 记录锁页就是仅仅把一条记录锁上官方的类型名称为Lock_REC_NOT_GAP。比如把id值为1的那条记录加一个记录锁。仅仅是锁住了id值为1的记录对其他行的数据没有影响。 记录锁是有S锁和X锁之分的称之为S型记录锁和X型记录锁 当一个事务获取了一条记录的S型记录锁后其他事务也可以继续获取该记录的S型记录锁但不可以继续获取X型记录锁当一个事务获取了一条记录的X型记录锁后其他事务既不可以继续获取该记录的S型记录锁也不可以继续获取X型记录锁。 举例记录锁的使用场景模拟 场景1事务1开启S锁事务2开始S锁并且尝试获取X型记录锁 事务1开启S锁 mysql begin; Query OK, 0 rows affected (0.01 sec)mysql select * from user where id 1 lock in share mode; ------------- | id | name | ------------- | 1 | 张三3 | ------------- 1 row in set (0.00 sec) 事务2开启S锁尝试获取X锁 mysql begin; Query OK, 0 rows affected (0.00 sec)mysql select * from user where id 1 lock in share mode; ------------- | id | name | ------------- | 1 | 张三3 | ------------- 1 row in set (0.00 sec)mysql update user set name 张三4 where id 1; 此时事务2获取S锁成功获取X锁失败进行阻塞状态。 场景2事务1开启X锁事务2尝试获取X锁和S锁 事务1开启X锁 mysql begin; Query OK, 0 rows affected (0.00 sec)mysql select * from user where id 1 for update; ------------- | id | name | ------------- | 1 | 张三3 | ------------- 1 row in set (0.00 sec) 事务2尝试获取X锁和S锁 mysql begin; Query OK, 0 rows affected (0.00 sec)mysql select * from user where id 1 ; ------------- | id | name | ------------- | 1 | 张三3 | ------------- 1 row in set (0.00 sec)mysql select * from user where id 1 for update; ERROR 1205 (HY000): Lock wait timeout exceeded; try restarting transaction mysql update user set name 张三10 where id 1; ERROR 1205 (HY000): Lock wait timeout exceeded; try restarting transaction mysql 事务2获取X锁和S锁失败进入阻塞 场景3事务1对id值为1的进行加S锁事务2对id值的5的加X锁。 事务1开启S锁 mysql begin; Query OK, 0 rows affected (0.00 sec)mysql select * from user where id 1 lock in share mode; ------------- | id | name | ------------- | 1 | 张三3 | ------------- 1 row in set (0.00 sec)事务2获取X锁 mysql begin; Query OK, 0 rows affected (0.00 sec) mysql update user set name 王五2 where id 5; Query OK, 1 row affected (0.00 sec) Rows matched: 1 Changed: 1 Warnings: 0事务2获取X锁成功。如果对同一行记录进行加锁则事务2获取X锁失败对不同的行进行加锁则互不影响。 2、间隙锁 (Gap Locks) MySQL 在 REPEATABLE READ 隔离级别下是可以解决幻读问题的解决方案有两种可以使用 MVCC 方案解决,也可以采用加锁 方案解决。但是在使用加锁方案解决时有个大问题就是事务在第一次执行读取操作时那些幻影记录尚不存在我们无法给这些幻影记录加上记录锁。InnoDB提出了一种称之为 **Gap Locks **的锁官方的类型名称为: LOCK_GAP 我们可以简称为 gap锁。比如把id值为8的那条记录加一个gap锁的示意图如下。 id1358name李四张三王五赵六 图中id值为8的记录加了gap锁意味着**不允许别的事务在id值为8的记录前边的间隙插入新记录 **其实就是id列的值(5,8)这个区间的新记录是不允许立即插入的。比如有另外一个事务再想插入一条id值为6的新记录它定位到该条新记录的下一条记录的id值为8而这条记录上又有一个gap锁所以就会阻塞插入操作直到拥有这个gap锁的事务提交了之后id列的值在区间(5,8)中的新记录才可以被插入。 gap锁的提出仅仅是为了防止插入幻影记录而提出的。虽然有 共享gap锁 和独占gap锁 这样的说法但是它们起到的作用是相同的。而且如果对一条记录加了gap锁(不论是共享gap锁还是独占gap锁)并不会限制其他事务对这条记录加记录锁或者继续加gap锁。 举例间隙锁的使用场景模拟 事务1加S锁 mysql select * from user; ---------------- | id | name | ---------------- | 1 | 张三3 | | 3 | 张胜男2 | | 5 | 王五2 | | 8 | 赵六 | | 10 | 张三10 | ---------------- 5 rows in set (0.00 sec) mysql begin; Query OK, 0 rows affected (0.00 sec)mysql select * from user where id 6 lock in share mode; Empty set (0.00 sec)mysql 事务2加X锁 mysql begin; Query OK, 0 rows affected (0.00 sec)mysql select * from user where id 6 for update; Empty set (0.00 sec)mysql 事务3新增数据 mysql begin; Query OK, 0 rows affected (0.00 sec)mysql insert into user (id,name) values (7,李四33); ^C^C -- query aborted ERROR 1317 (70100): Query execution was interrupted mysql insert into user (id,name) values (2,李四33); Query OK, 1 row affected (0.00 sec) 间隙锁加的是6所以间隙范围是5-8新增id为7则失败新增id为2则成功。 3、临键锁 (Next-Key Locks) 有时候我们既想 锁住某条记录 又想 阻止其他事务在该记录前边的 间隙插入新记录所以innoDB就提出了一种称之为Next-Key Locks的锁官方的类型名称为: LOCK_ORDINARY我们也可以简称为next-key锁。Next-KeyLocks是在存储引擎 innodb 、事务级别在 **可重复读 **的情况下使用的数据库锁innodb默认的锁就是Next-Keylocks。 next-key锁 的本质就是一个 记录锁 和一个 gap锁 的合体它既能保护该条记录又能阻止别的事务将新记录插 入被保护记录前边的 间隙。 举例临键锁的使用场景模拟 事务1加X锁 mysql begin; Query OK, 0 rows affected (0.00 sec)mysql select * from user where id 8 and id 5 for update; ------------ | id | name | ------------ | 8 | 赵六 | ------------ 1 row in set (0.00 sec) 事务2尝试获取X锁和S锁并且尝试插入数据 mysql begin; Query OK, 0 rows affected (0.00 sec)mysql select * from user where id 8 lock in share mode; ^C^C -- query aborted ERROR 1317 (70100): Query execution was interrupted mysql select * from user where id 8 for update; ^C^C -- query aborted ERROR 1317 (70100): Query execution was interrupted mysql insert into user (id,name) values (7,李四2323); ^C^C -- query aborted ERROR 1317 (70100): Query execution was interrupted 事务2都需要进行等待满足间隙锁和记录锁要求 4、插入意向锁(Insert Intention Locks) 我们说一个事务在 插入 一条记录时需要判断一下插入位置是不是被别的事务加了 gap锁 (next-key锁 也包含gap锁)如果有的话插入操作需要等待直到拥有 gap锁 的那个事务提交。但是InnoDB规定事务在等待的时候也需要在内存中生成一个锁结构表明有事务想在某个 间隙 中 插入新记录但是现在在等待。InnoDB就把这种类型的锁命名为Insert Intention Locks官方的类型名称为:LOCK_INSERT_INTENTION我们称为插入意向锁 。插入意向锁是一种 Gap锁不是意向锁在insert操作时产生。 插入意向锁是在插入一条记录行前由INSERT 操作产生的一种间隙锁。该锁用以表示插入意向当多个事务在同一区间(gap)插入位置不同的多条数据时事务之间不需要互相等待。假设存在两条值分别为4和7的记录两个不同的事务分别试图插入值为5和6的两条记录每个事务在获取插入行上独占的(排他)锁前都会获取(47)之间的间隙锁但是因为数据行之间并不冲突所以两个事务之间并不会产生冲突(阻塞等待)。总结来说插入意向锁的特性可以分成两部分: 插入意向锁是一种特殊的间隙锁– 间隙锁可以锁定开区间内的部分记录,插入意向锁之间互不排斥所以即使多个事务在同一区间插入多条记录只要记录本身(主键、唯一索引)不冲突那么事务之间就不会出现冲突等待。 注意虽然插入意向锁中含有意向锁三个字但是它并不属于意向锁而属于间隙锁因为意向锁是表锁而插入意向锁是行锁 。 从图中可以看到由于T1持有gap锁所以T2和T3需要生成一个插入意向锁的锁结构并且处于等待状态。当T1提交后会把它获取到的锁都释放掉这样T2和T3就能获取到对应的插入意向锁了(本质上就是把插入意向锁对应锁结构的is_waiting属性改为false)T2和T3之间也并不会相互阻塞它们可以同时获取到id值为8的插入意向锁然后执行插入操作。事实上插入意向锁并不会阻止别的事务继续获取该记录上任何类型的锁。 举例插入意向锁的使用场景模拟 场景事务1开启间隙锁事务2和事务3分别插入数据在事务1不提交之前事务2和事务3都是进入阻塞状态直到事务1提交事务2和事务3同时成功 事务1开启间隙锁 mysql begin; Query OK, 0 rows affected (0.00 sec)mysql select * from user where id 6 for update; Empty set (0.00 sec)事务2插入数据 mysql begin; Query OK, 0 rows affected (0.00 sec)mysql insert into user (id,name) values (7,李四2323); Query OK, 1 row affected (34.91 sec) 事务3插入数据 mysql begin; Query OK, 0 rows affected (0.00 sec) mysql insert into user (id,name) values (6,李四2323); Query OK, 1 row affected (6.35 sec) 事务1未提交事务2和事务3进入阻塞状态事务1提交事务2和事务3则新增成功 MySQL | 表锁——排他锁、共享锁、意向锁、元数据锁
http://www.w-s-a.com/news/246011/

相关文章:

  • 专用车网站建设wordpress半透明
  • 石狮网站建设哪家好wordpress 3.9 漏洞
  • 为何建设单位网站找网络推广策畿
  • 用网站模板做网站动漫制作专业学校前十名
  • 网页 代码怎么做网站网站建设与维护课程设计
  • 网站制作哪家公司好企业名录联系电话
  • 做的网站怎么上传到网上wordpress图片之间空一行
  • 腾讯云建设网站视频vi报价单
  • 个人网站发布怎么做建设银行网站收款怎么打明细
  • 网站整体色调网站建设都有什么类型
  • 比较简洁大方的网站软件工程四大方向
  • 大家称赞的网站建设常德小学报名网站
  • 做网站怎么建文件夹百度网盘搜索神器
  • 企业有域名怎么做网站淘宝推广平台
  • 学网站开发去哪学药品销售推广方案
  • 哔哩哔哩h5播放器深圳网站seo外包公司哪家好
  • asp做的手机网站wordpress 文章title
  • 网站验证码目录wordpress内嵌播放器
  • 文明网网站建设南昌市建设规费标准网站
  • 安康有建网站的公司吗做网站用什么网名好
  • 济南网站制作哪家专业西安市城乡建设网官方网站
  • 网站建设有趣小游戏怎样让网站优化的方式
  • 昭通做网站儿童编程教学入门教程
  • eclipse静态网站开发软文广告投放平台
  • 网站建设教学视频济南做网站需要多少钱
  • 网站免费做软件市工商联官方网站建设方案
  • 网站建设大体包含英铭长沙网站建设
  • 网站建设培训学校北京如何搜索网站
  • discuz论坛模板哪些网站容易做seo优化
  • 渭南公司做网站网站建设互联网推广