`

mysql事务行锁for update实现写锁的功能

 
阅读更多

       在电子商务里,经常会出现库存数量少,购买的人又特别多,大并发情况下如何确保商品数量不会被多次购买。其实很简单,利用事务+for update就可以解决。我们都知道for update实际上是共享锁,是可以被读取的。但是如何在执行时,不被读取呢。

       简单来说:假设现在库存为1,现在有A和B同时购买

1、先开启一个事务,执行sql

select stock from good where id=1 for update;//查询good表某个商品中stock的数量

2、查出来后,在程序里在判断这个stock是否为0(你用什么语言,不关我事)

3、接下来执行

update good set stock=stock-1 where id=1;

4、最后再

 commit;

但是这个时候B也是select stock from good where id=1 for update;注意:for update不能省略。。这个时候会出现被锁住,无法被读取。所以这就能够保证了商品剩余数量为1的一致性。

分享到:
评论

相关推荐

    mySQL事务处理

    关于mysql的事务处理 public static void StartTransaction(Connection... --这里for update , 以前用Oracle的时候也是有这个行锁 // ... UPDATE book SET book_number = book_number - 1 WHERE book_id = 123; COMMIT;

    Mysql 行级锁的使用及死锁的预防方案

     mysql的InnoDB,支持事务和行级锁,可以使用行锁来处理用户提现等业务。使用mysql锁的时候有时候会出现死锁,要做好死锁的预防。 二、MySQL行级锁  行级锁又分共享锁和排他锁。  共享锁:  名词解释:共享锁又...

    基于Java+MySQL设计与实现的秒杀与抢购模型架构【100013279】

    1.利用MySQL的update行锁实现悲观锁。 2.MySQL加字段version实现乐观锁。 3.基于AtomicInteger的CAS机制; 4.使用Redis作为原子计数器(watch事务+decr操作),RabbitMQ作为消息队列记录用户抢购行为,MySQL做异步...

    MySQL管理之道 性能调优、高可用与监控.part2.rar

    《mysql管理之道:性能调优、高可用与监控》由资深mysql专家撰写,以最新的mysql版本为基础,以构建高性能mysql服务器为核心,从故障诊断、表设计、sql优化、性能参数调优、mydumper逻辑、xtrabackup热备份与恢复、...

    MySQL锁机制与用法分析

    本文实例讲述了MySQL锁机制与用法。分享给大家供大家参考,具体如下: MySQL的锁机制比较简单,其最显著的特点是不同的存储引擎支持不同的锁机制。比如,MyISAM和MEMORY存储引擎采用的是表级锁;BDB存储引擎采用的是...

    当Mysql行锁遇到复合主键与多列索引详解

    分析代码后发现有复合主键的update情况,更新复合主键表时只使用了一个字段更新,同时在事务内又有对该表的insert操作,结果出现了偶发的死锁问题。 比如表t_lock_test中有两个主键都为primary key(a,b) ,但是更新...

    MySql整理(基础进阶运维).docx

    索引分类,语法,使用规则,设计原则,SQL优化,插入数据,主键优化,orderby优化,groupby优化,limit优化,count优化,update优化(避免行锁升级为表锁),视图/存储过程/触发器,视图,存储过程,锁(重点),概述,全局锁,表级锁,...

    2019最新21个MySQL高频面试题介绍

    1、Mysql中有哪几种锁? MyISAM 支持表锁,InnoDB 支持表锁和行锁,默认为行锁。 表级锁:开销小,加锁快,不会出现死锁。锁定粒度大,发生锁冲突的概率最高,并发量 最低。 行级锁:开销大,加锁慢,会出现死锁。锁...

    面试中涉及到的mysql锁看完就不愁了

     MyIsam :不支持事务,写锁优先,这样会阻塞其他事务的读写,所以myIsam不适合写锁,偏向于用读锁  InnoDB :支持事务(ACID),支持行锁  A: atomicity(原子性) C: consistent(一致性)  I: isolation...

    MySQL中InnoDB存储引擎的锁的基本使用教程

    MyISAM和MEMORY采用表级锁(table-level locking) BDB采用页面锁(page-leve locking)或表级锁,默认为页面锁 InnoDB支持行级锁(row-level locking)和表级锁,...InnoDB存储引擎实现了如下两种锁 1、共享锁(S Lo

    SecKillDesign:秒杀与抢购系统架构设计与实现

    1.利用MySQL的update行锁实现悲观锁。 2.MySQL加字段version实现乐观锁。 3.基于AtomicInteger的CAS机制; 4.使用Redis作为原子计数器(watch事务+decr操作),RabbitMQ作为消息队列记录用户抢购行为,MySQL做异步...

    深入分析MSSQL数据库中事务隔离级别和锁机制

    锁机制 NOLOCK和READPAST的区别。...NOLOCK表明没有对数据表添加共享锁以阻止其它事务对数据表数据的修改。 SELECT * FROM Customer 这条语句将一直死锁,直到排他锁解除或者锁超时为止。(注:设置锁超时

    深入探讨:MySQL数据库MyISAM与InnoDB存储引擎的比较

    InnoDB是事务型引擎,支持回滚、崩溃恢复能力、多版本并发控制、ACID事务,支持行级锁定(InnoDB表的行锁不是绝对的,如果在执行一个SQL语句时MySQL不能确定要扫描的范围,InnoDB表同样会锁全表,如like操作时的

    SecondKill:基于SSH、Redis、RabbitMQ的商品秒杀系统

    1.利用MySQL的update行锁实现悲观锁。 2.MySQL加字段version实现乐观锁。 3.基于AtomicInteger的CAS机制; 4.使用Redis作为原子计数器(watch事务+decr操作),RabbitMQ作为消息队列记录用户抢购行为,MySQL做异步...

    Mongodb副本集和分片示例详解

    mongo在许多地方用起来还有许多不如意的地方,比如不知道如何加行锁,虽然mongo本身可以加写锁, 多写的时候保证原子性,但不能向mysql在事务中 select … for update 这样加锁, 这样可以在应用代码中添加逻辑并且...

    MyISAM InnoDB 区别

     另外,InnoDB表的行锁也不是绝对的,假如在执行一个SQL语句时MySQL不能确定要扫描的范围,InnoDB表同样会锁全表,例如update table set num=1 where name like “%aaa%”  两种类型最主要的差别就是Innodb 支持...

    MySQL数据表存储引擎类型及特性

    数据库引擎用于存储、...没有事务支持,不支持行锁外键,因此当insert、update会锁定整个表,效率会低一些,MyIASM中存储了行数,如果表的读操作远大于写且不需要事务,MyISAM优选。索引1.MyISAM引擎索引结构为B+Tree

    oracle学习文档 笔记 全面 深刻 详细 通俗易懂 doc word格式 清晰 连接字符串

     事务控制语言(Transactional Control Language,TCL),用于维护数据的一致性,包括COMMIT(提交事务)、ROLLBACK(回滚事务)和SAVEPOINT(设置保存点)3条语句 二、 Oracle的数据类型 类型 参数 描述 字符类型...

Global site tag (gtag.js) - Google Analytics