美文网首页
mysql 高并发 表锁、行锁

mysql 高并发 表锁、行锁

作者: yann_mty | 来源:发表于2016-12-30 15:14 被阅读0次

举个栗子:
用户充值时要改变用户钱包总金额,以及添加充值记录

分析

start TRANSACTION
update user_balance set user_money=_user_money where user_id=_user_id;
insert into user_balancelog (user_id,user_money) values(_user_id,_user_money);
**#如果这边卡顿了一会,并且卡顿的同时有其它用户转账给该用户将发生灾难性事故  用select sleep(5);模拟**
commit;

解决方案 :
1.给表加锁 表锁? 行锁?
2.表锁分 read锁 以及 write锁
read锁进过分析还是无用 只能给整张表加写锁 但会大大减小效率

3.行锁 共享锁 以及 排它锁 (索引级别,上端sql为例 user_id必须为索引,不然还是会以表锁的形式加锁)
整合如下:

declare _money DECIMAL(10,2) DEFAULT 0; #局部变量
declare error bit DEFAULT false;
declare CONTINUE HANDLER for SQLEXCEPTION set error=true; #捕获错误信息
select user_money into _money from user_balance where user_id=_user_id for update;
set _user_moneys=_user_money+_money;
start TRANSACTION;
update user_balance set user_money=_user_moneys where user_id=_user_id;
insert into user_balancelog (user_id,user_money) values(_user_id,_user_money);
if error=true THEN
ROLLBACK; select ‘出错’ as result;
ELSE
commit;
select ‘重置完成’ as result;
end if;

相关文章

  • mysql 高并发 表锁、行锁

    举个栗子:用户充值时要改变用户钱包总金额,以及添加充值记录 分析 解决方案 :1.给表加锁 表锁? 行锁?...

  • Mysql锁

    mysql的两种锁 表锁:开销小,加锁快,锁粒度大,不会出现死锁;并发度最低,遇到锁冲突的概率高 行锁:开销大,加...

  • MySQL中的锁和并发控制

    综述 对MySQL中并发控制所用到的机制和锁进行整理。 行锁 表锁 间隙锁 临键锁 MVCC 悲观锁 乐观锁 行锁...

  • mysql中的"锁"事儿总结

    定义 关于mysql中的锁,是用于管理不同事务对共享资源的并发访问的问题,分为行锁和表锁。 表锁与行锁的区别: 锁...

  • Mysql锁有哪些,如何理解 --- 2021-09-14

    按锁的粒度分: 行锁,锁某行数据,锁粒度最小,并发度高 表锁,锁整张表,锁粒度最大,并发低 间隙锁,锁的是一个区间...

  • mysql 中的锁结构

    Mysql 支持3中锁结构 表级锁,开销小,加锁快,不会出现死锁,锁定的粒度大,冲突概率高,并发度最低 行级锁,开...

  • 1-1、mysql锁机制

    一、MySQL的锁 表级锁:开销小,加锁快;不会死锁;粒度大,锁冲突的概率最高,并发度最低。行级锁:开销大,加锁慢...

  • InnoDB引擎的行锁和表锁

    在Mysql中,Innodb数据引擎支持行锁和表锁,Myisam数据引擎只支持表锁 1 行锁和表锁 行锁是通过索引...

  • 总结Mysql中的锁

    MySQL中的锁 概述 MyISAM支持表锁,InnoDB支持表锁和行锁,默认为行锁 表级锁:开销小,加锁快,不会...

  • MySQL知识点

    Mysql中有哪几种锁? MyISAM支持表锁,InnoDB支持表锁和行锁,默认为行锁 表级锁:开销小,加锁快,不...

网友评论

      本文标题:mysql 高并发 表锁、行锁

      本文链接:https://www.haomeiwen.com/subject/awpmvttx.html