悲观锁与乐观锁是两种常见的资源并发锁设计思路,也是并发编程中一个很是基础的概念。mysql

悲观锁(Pessimistic Lock)

悲观锁的特色是先获取锁,再进行业务操做,即“悲观”的认为获取锁是很是有可能失败的,所以要先确保获取锁成功再进行业务操做。一般所说的“一锁二查三更新”即指的是使用悲观锁。一般来说在数据库上的悲观锁须要数据库自己提供支持,即经过经常使用的select … for update操做来实现悲观锁。当数据库执行select for update时会获取被select中的数据行的行锁,所以其余并发执行的select for update若是试图选中同一行则会发生排斥(须要等待行锁被释放),所以达到锁的效果。select for update获取的行锁会在当前事务结束时自动释放,所以必须在事务中使用。sql

这里须要注意的一点是不一样的数据库对select for update的实现和支持都是有所区别的,例如oracle支持select for update no wait,表示若是拿不到锁马上报错,而不是等待,mysql就没有no wait这个选项。另外mysql还有个问题是select for update语句执行中全部扫描过的行都会被锁上,这一点很容易形成问题。所以若是在mysql中用悲观锁务必要肯定走了索引,而不是全表扫描。数据库

使用例子编程

1.悲观锁须要等待提交commit后才能够执行并发

set autocommit = 0;

BEGIN;

SELECT * FROM `fook_business` where id = 1 FOR UPDATE;

UPDATE `fook_business` set `areas_id` = 2 where id = 1;oracle

2.然後手動更新 id=1 這條數據,看到更新失敗,因為 id=1 這條被鎖住了高并发

UPDATE `fook_business` set `areas_id` = 3 where id = 1;spa

3.commit提交成功设计

更新库存时,用mysql锁解决高并发问题的:https://mp.weixin.qq.com/s/gM_YT669SjJycflXTb_eBQblog

mysql悲观锁的应用_mysql悲观锁相关推荐

  1. mysql行锁表怎么办_mysql - 表锁,行锁

    MyISAM存储引擎:开销小,加锁快,无死锁.锁定粒度大,并发度低,容易发生锁冲突.   不支持事务.            采用表锁 (操作时对操作的表上锁) 基本不用了 innoDB存储引擎:开销 ...

  2. mysql数据锁的类型_MySQL数据库锁类型

    锁概念: 当高并发访问同一个资源时,可能会导致数据不一致,需要一种机制将用户访问数据的顺序进行规范化,以保证数据库数据的一致性.锁就是其中的一种机制. 一个栗子 :以买火车票为例,火车票可面向广大消费 ...

  3. mysql 数据库表被锁住了_mysql数据库锁的产生原因及解决办法

    数据库和操作系统一样,是一个多用户使用的共享资源.当多个用户并发地存取数据 时,在数据库中就会产生多个事务同时存取同一数据的情况.若对并发操作不加控制就可能会读取和存储不正确的数据,破坏数据库的一致性 ...

  4. mysql 查看锁表日志_MYSQL 表锁情况查看

    查看锁表情况 mysql> show status like 'Table%'; +----------+--–+ | Variable_name | Value | +----------+- ...

  5. mysql MDL锁如何解决_MySQL元数据锁MDL

    [TOC] > 除了我们经常熟知的共享锁和排他锁外,MySQL数据库还有一种锁叫元数据锁,主要为了保证元数据的一致性,用于处理不同线程操作同一数据对象的同步与互斥问题. # 一.元数据 所谓元数 ...

  6. mysql锁表查询_Mysql数据库锁情况下开启备份导致数据库无法访问处理分享

    [背景简介] MySQL是一种开放源代码的关系型数据库管理系统(RDBMS),因为其速度.可靠性和适应性而备受关注.大多数人都认为在不需要事务化处理的情况下,MySQL是管理内容最好的选择.mysql ...

  7. mysql 不锁表备份_Mysql不锁表备份之Xtrabackup的备份与恢复

    一.Xtrabackup介绍 MySQL冷备.热备.mysqldump都无法实现对数据库进行增量备份.如果数据量较大我们每天进行完整备份不仅耗时且影响性能.而Percona-Xtrabackup就是为 ...

  8. mysql proxy 悲观锁_mysql悲观锁总结和实践

    使用场景举例:以MySQL InnoDB为例 商品t_goods表中有一个字段status,status为1代表商品未被下单,status为2代表商品已经被下单,那么我们对某个商品下单时必须确保该商品 ...

  9. mysql 悲观锁 共享锁_MySQL 乐观锁 悲观锁 共享锁 排他锁

    乐观锁 乐观锁是逻辑概念上的锁,不是数据库自带的,需要我们自己去实现.乐观锁是指操作数据库时(更新操作),想法很乐观,认为这次的操作不会导致冲突,在操作数据时,并不进行任何其他的特殊处理(也就是不加锁 ...

最新文章

  1. 121. Best Time to Buy and Sell Stock
  2. 如何系统地入门学习stm32?
  3. Specification使用notin
  4. 局部响应归一化(Local Response Normalization)
  5. linux 进程优先级 之设置实时进程 (另一种方式是设置nice值)【转】
  6. zabbix mysql路径_ZABBIX数据库迁移目录
  7. 最后一个 IPV4 地址分配完毕,正式向IPV6过渡!
  8. oracle SQL 命令行(二.视图)
  9. BZOJ1787: [Ahoi2008]Meet 紧急集合
  10. 【Java版】将汉字转化为gb2312编码
  11. 【转】深度理解C# 的执行原理
  12. Ubuntu 删除dash 中无效的图标
  13. redis 字符串类型原子性实现方案与memcached-cas原子性性能比较
  14. WINDOWS系统一套基于现成软件的局域网视频转播系统方案
  15. Myeclipse8.5 cn 序列号
  16. python search函数 中文,Python-re中search()函数的用法详解(查找ip)
  17. 洛谷—— P1069 细胞分裂
  18. 计算机替换字体怎么操作,电脑怎么更换字体-电脑更换字体的方法 - 河东软件园...
  19. 如何使用prism进行统计分析(Analysis)?
  20. 你真的了解显卡吗?显卡基础知识大扫盲

热门文章

  1. [奔跑吧 Linux内核][学习记录]编译内核-实验1-2-[环境以及参考]
  2. 获取root权限及破解原理分析
  3. 计算机网络室工作总结,计算机教室工作总结范文
  4. 丘比特 脱单攻略之女神倒追
  5. 我爱你用计算机按出来,计算机的作用
  6. CodeProject.AI 服务器:AI 最简单的方法
  7. SLE46C-40.K44P-M12单光速安全传感器
  8. 转型下一站:IT服务
  9. 安装linux双系统简书,安装win10+ubuntu18.04双系统
  10. 旧款Mac开启随航(sideCar)功能