for update 的作用

共享锁:select …… lock in share mode;
排他锁:select …… for update;

  • 加了for update 后,查询语句会加上排他锁(写锁)。意味着两个事务同时使用select …… for
    update时,后面的事务要等待最先拿到排它锁的事务释放后才能查询到。
  • 如果开启了事务,select默认是共享锁。
  • 其他进程或事务想要执行修改,则需要等加了 for update 的进程提交后方可成功。
  • 使用了select …… for update后,其他事务对该表的查询会阻塞吗?
  • 如果一个事务加了for update,第二个事务查询没加for update,第二个事务的查询不会被阻塞。
  • 加了for update 的查询,其他进程可以读,但不能修改,如,

select * from b2b_parameter.bsp_id_generation where
table_name=‘uuc_user_account’ for update;

则bsp_id_generation表的table_name字段所在行会加上行写锁(排他锁)。

  • where 查询的字段要命中索引才会使用到行锁,否则会导致表锁,禁止被其他事务修改。
  • 加了for update 其他进程可以insert吗?

答:可以。如果没用事务,不会阻塞insert

  • for update 的适用场景

对于先查询,然后依赖查询的值做修改。要保证查询和修改的原子性。

  • 对于先select,后插入的场景,select查询不到记录将不会用到锁。

如查询手机号不存在,不存在就插入注册一个用户。 select mobile … where mobile=15218621454
for update if !mobile { insert … } 两个事务并发同时执行,会导致插入两条重复数据,因为for
update 查询不到记录则不会阻塞事务(排它锁失效)

解决思路:

(1)这种情况可以用锁表解决,比如select count(1) where 1 … for
update。让他阻塞,但是锁表性能不行。
(2)另外一种是用redis缓存锁排队。
(3)还有一种最简单的是加唯一索引。
(4)对于第一种锁表的改造,用冷数据一定能命中查询来致使锁行阻塞。

如select id order by id asc limit 1 … for update ,然后再执行后面的业务逻辑

select mobile … where mobile=15218621454;

if !mobile
{
insert …
}
牺牲一个冷数据的性能来做排它锁。

数据库 for update的作用相关推荐

  1. 关于Access数据库执行Update语句后,不报错,但影响行数总是返回0的问题

    最近碰到一个奇怪的问题,使用Access数据库执行Update语句后,不报错,但影响行数总是返回0. 因为是第一次碰到这个问题,纠结了半天.后来在网上搜索得到解决方案: SQL语句传参数的顺序和语句中 ...

  2. mysql leave的作用_MySQL数据库中DELIMITER的作用

    以下的文章主要是向大家描述的是MySQL数据库中delimiter的作用是什么?我们一般都认为这个命令和存储过程关系不大,到底是不是这样的呢?以下的文章将会给你相关的知识,望你会有所收获. 下面是一个 ...

  3. mysql delimiter的作用_MySQL数据库中delimiter的作用概述

    以下的文章主要是向大家描述的是MySQL数据库中delimiter的作用是什么?我们一般都认为这个命令和存储过程关系不大,到底是不是这样的呢?以下的文章将会给你相关的知识,望你会有所收获. 其实就是告 ...

  4. MySQL数据库中视图的作用

    数据库中视图的作用 视图是从一个或几个基本表(或视图)导出的表.它与基本表不同,是一个虚表.数据库只存放视图的定义,而不存放视图对应的数据,这些数据仍存放在原来的基本表中.所以基本表中的数据发生变化, ...

  5. oracle中exist什么意思,oracle中not exists 是什么意思 , oracle数据库中exists的作用

    导航:网站首页 > oracle中not exists 是什么意思 , oracle数据库中exists的作用 oracle中not exists 是什么意思 , oracle数据库中exist ...

  6. 简述er图的作用_数据库关系图的作用是什么?

    你的位置: 问答吧 -> MSSQL -> 问题详情 数据库关系图的作用是什么? 一.数据库关系图的作用是什么? 二.ER图的作用是什么? 三.两者之间的差别和联系??? 作者: zhan ...

  7. 数据库中触发器的作用是什么?

    数据库中触发器的作用是什么? 什么是触发器 触发器是一种特殊的存储过程,只能由事件驱动调用,而无法直接调用. 触发器有什么用 当对数据库的相关对象(数据库.表.视图)进行某些特定的操作时,数据库会自动 ...

  8. 数据库中触发器的作用,规则和限制

    触发器--看到这个名字总是会想到数电中学过的触发器,有输入端和输出端,根据电平的高低来触发. 数据库中的触发器是个特殊的存储过程,主要是通过事件进行触发而被执行的,而存储过程可以通过存储过程名称而被直 ...

  9. mysql中触发器有什么作用_数据库触发器有什么作用?

    展开全部 触发器的作用: 自动计算数据值,如果数据的值达到了一定的要求,则进行特32313133353236313431303231363533e78988e69d8331333431363034定的 ...

最新文章

  1. pandas.DataFrame删除/选取含有特定数值的行或列实例
  2. sql查询百分之20到百分之40的数据_拼多多面试题:如何查找前20%的数据?
  3. ubuntu修改登陆用户名称_修改ubuntu的用户名(注意用户名和主机名的区别)
  4. Cisco网络设备搭建×××服务器的全部过程
  5. 代码生成工具随笔(3)---占领最后一块黄金宝地
  6. 嵌入式linux文件系统启动,嵌入式Linux之文件系统启动分析【原创】
  7. django-学习索引1908版
  8. VGG Pool5 Feature Map特征提取
  9. Springboot整合一之Springboot整合RabbitMQ
  10. Unity C#笔记 委托事件
  11. vue-cli3.0升级失败,vue-cli卸载不掉,vue-cli升级不了3.0,
  12. 《RunningMan》评论及弹幕情感分析
  13. Ubuntu系统 不使用snap安装firefox,使用firefox官网下载的安装包安装firefox
  14. 小写数字转换成大写数字
  15. 《石头迷阵》游戏业务数据设计、游戏功能制作、游戏界面绘制
  16. java mysql 生僻字 乱码_mysql 生僻字乱码
  17. 开发企业架构的实用指南
  18. Photoshop cc 2018基础
  19. 学技术总是很慢,你得培养这些个技巧!
  20. Android adb命令行调试技巧

热门文章

  1. 使用python制作一款能破解ZIP/RAR压缩包与WIFI密码的整合多功能工具
  2. 比较山海鲸数据可视化和Data MAX,谁赢了?
  3. IOS开发环境 Xcode 下载 安装
  4. AUTOSAR Diagnosis Message Configuration
  5. linux常规应用培训,Linux基本应用培训.ppt
  6. 面试时,我说谎了——Leo网上答疑44
  7. 计算机程序结构和解释,SICP 计算机程序的构造和解释
  8. PHP清洗过滤器Sanitize filters
  9. Python周刊481期
  10. 解决 remote Read-only file system 报错原因