无法在这个位置找到: head2.htm
当前位置: 建站首页 > 新闻动态 > 公司新闻 >

mysql 行级锁的应用及其死链接的防止

时间:2021-01-30 00:35来源:未知 作者:jianzhan 点击:
一、序言mysql的InnoDB,适用事务管理和行级锁,可使用行锁来解决客户取现等业务流程。应用mysql锁的情况下有时候候会出現死链接,要搞好死链接的防止。二、MySQL行级锁行级锁又分共享
一、序言

mysql的InnoDB,适用事务管理和行级锁,可使用行锁来解决客户取现等业务流程。应用mysql锁的情况下有时候候会出現死链接,要搞好死链接的防止。

二、MySQL行级锁

行级锁又分共享资源锁和排他锁。

共享资源锁:

名词表述:共享资源锁又称为读锁,全部的事务管理只有对其开展读实际操作不可以写实际操作,再加共享资源锁后别的事务管理不可以加上排他锁了只有加行级锁。

使用方法:SELECT `id` FROM  table WHERE id in(1,2)   LOCK IN SHARE MODE 結果集的数据信息都是加共享资源锁

排他锁:

名词表述:若某一事情对某一行再加了排他锁,只有这一事务管理对其开展读写能力,别的事务管理不可以对其开展加一切锁,别的过程能够载入,不可以开展写实际操作,需等候其释放出来。

使用方法:SELECT `id` FROM mk_user WHERE id=1 FOR UPDATE

三、案例运用
 ?php
 $uid=$_SESSION[ uid 
 //打开事务管理
 sql:begin
 //打开行级锁的排他锁
 sql:SELECT `coin` FROM user WHERE id=$uid FOR UPDATE 
 //扣减客户帐户钱币
 $res=update user set coin=coin-value where id=1;
 if($res){
 //将客户的取现信息内容加上到取现表
 sql:insert into user values(null, {$uid} ,value);
 //分辨加上結果
 if(add_cash_result){
 mit
 }else{
 sql:rollback
 }else{
 sql:rollback;
 }

实际上流程不负杂,便是打开事务管理分辨每个結果为真就递交为假就回退。单独排他锁沒有甚么难题,当一个表关系到好几个排他锁的情况下要留意避免产生死链接。

四、死链接

`id`  主键数据库索引

`name` index 数据库索引

`age`  一般字段名

死链接造成的压根缘故是2个之上的过程必须求另一方释放出来資源,以致于过程都一直等候。在编码上是由于2个或是之上的事务管理必须求另外一个释放出来資源。

死链接造成的四个必需标准:互斥标准、环路标准、恳求维持、不能夺走,缺一不能,相对性应的要是毁坏在其中一种标准死链接也不会造成。

比如下边两根句子 第一条句子会优先选择应用`name`数据库索引,由于name并不是主键数据库索引,还会继续采用主键数据库索引

第二条句子是最先应用主键数据库索引,再应用name数据库索引 假如两根句子同时实行,第一条句子实行了name数据库索引等候第二条释放出来主键数据库索引,第二条实行了主键数据库索引等候第一条的name数据库索引,那样就导致了死链接。

处理方式:更新改造第一条句子 使其依据主键值开展升级

update mk_user set name = 1 where `name`= idis12 
update mk_user set name= 12 where id=12;
//更新改造后
update mk_user set name= 1 where id=(select id from mk_user where name= idis12 

(责任编辑:admin)
织梦二维码生成器
顶一下
(0)
0%
踩一下
(0)
0%
------分隔线----------------------------
无法在这个位置找到: ajaxfeedback.htm
栏目列表
推荐内容


扫描二维码分享到微信