一、前言
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
三、实例应用
<"{$uid}",value); //判断添加结果 if(add_cash_result){ sql:commit }else{ sql:rollback } }else{ sql:rollback; }
其实步骤不复杂,就是开启事务判断各个结果为真就提交为假就回滚。单个排他锁没有什么问题,当一个表关联到多个排他锁的时候要注意防止发生死锁。
四、死锁
`id` 主键索引
`name` index 索引
`age` 普通字段
死锁产生的根本原因是两个以上的进程都要求对方释放资源,以至于进程都一直等待。在代码上是因为两个或者以上的事务都要求另一个释放资源。
死锁产生的四个必要条件:互斥条件、环路条件、请求保持、不可剥夺,缺一不可,相对应的只要破坏其中一种条件死锁就不会产生。
例如下面两条语句 第一条语句会优先使用`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' );
以上所述是小编给大家介绍的Mysql 行级锁的使用及死锁的预防解决方法,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对网站的支持!
RTX 5090要首发 性能要翻倍!三星展示GDDR7显存
三星在GTC上展示了专为下一代游戏GPU设计的GDDR7内存。
首次推出的GDDR7内存模块密度为16GB,每个模块容量为2GB。其速度预设为32 Gbps(PAM3),但也可以降至28 Gbps,以提高产量和初始阶段的整体性能和成本效益。
据三星表示,GDDR7内存的能效将提高20%,同时工作电压仅为1.1V,低于标准的1.2V。通过采用更新的封装材料和优化的电路设计,使得在高速运行时的发热量降低,GDDR7的热阻比GDDR6降低了70%。
更新日志
- 群星.2016-环球词选5CD【环球】【WAV+CUE】
- 蔡幸娟.1992-蔡幸娟专辑4辑【金企鹅】【WAV+CUE】
- 英雄联盟诱饵表情为什么被禁 英雄联盟诱饵表情什么意思
- 英雄联盟夏季赛季后赛什么情况 深圳NIP战队晋级英雄联盟季后赛
- 逆水寒手游联动永劫无间皮肤价格介绍 逆水寒手游联动永劫无间皮肤多少钱
- 丹麦发烧音响达尼试音碟TheDALICDVol.01(2006)[WAV+CUE]
- 天龙音响100周年纪念唱片《DigitalMastersIII》[WAV+CUE]
- [雨果唱片]高雄市立国乐团《秋》1999[WAV+CUE]
- 《黑神话》IGN完整评测:卡入地下、文本变回中文
- 《黑神话:悟空》彩蛋上线微博超话!满屏飘猴子
- 方便面为何逐渐失宠?泡面大王统一营收都得靠饮料
- 蔡依林.2018-UGLY.BEAUTY【SONY】【WAV+CUE】
- 群星.1975-清宫残梦(2010娱乐50周年金碟版)【娱乐唱片】【WAV+CUE】
- 阿杜.2024-时光音乐会【金蜂】【WAV+CUE】
- 群星《国语老歌 震撼人声 2CD》[WAV/分轨][1GB]