数据库 for update的作用
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的作用相关推荐
- 关于Access数据库执行Update语句后,不报错,但影响行数总是返回0的问题
最近碰到一个奇怪的问题,使用Access数据库执行Update语句后,不报错,但影响行数总是返回0. 因为是第一次碰到这个问题,纠结了半天.后来在网上搜索得到解决方案: SQL语句传参数的顺序和语句中 ...
- mysql leave的作用_MySQL数据库中DELIMITER的作用
以下的文章主要是向大家描述的是MySQL数据库中delimiter的作用是什么?我们一般都认为这个命令和存储过程关系不大,到底是不是这样的呢?以下的文章将会给你相关的知识,望你会有所收获. 下面是一个 ...
- mysql delimiter的作用_MySQL数据库中delimiter的作用概述
以下的文章主要是向大家描述的是MySQL数据库中delimiter的作用是什么?我们一般都认为这个命令和存储过程关系不大,到底是不是这样的呢?以下的文章将会给你相关的知识,望你会有所收获. 其实就是告 ...
- MySQL数据库中视图的作用
数据库中视图的作用 视图是从一个或几个基本表(或视图)导出的表.它与基本表不同,是一个虚表.数据库只存放视图的定义,而不存放视图对应的数据,这些数据仍存放在原来的基本表中.所以基本表中的数据发生变化, ...
- oracle中exist什么意思,oracle中not exists 是什么意思 , oracle数据库中exists的作用
导航:网站首页 > oracle中not exists 是什么意思 , oracle数据库中exists的作用 oracle中not exists 是什么意思 , oracle数据库中exist ...
- 简述er图的作用_数据库关系图的作用是什么?
你的位置: 问答吧 -> MSSQL -> 问题详情 数据库关系图的作用是什么? 一.数据库关系图的作用是什么? 二.ER图的作用是什么? 三.两者之间的差别和联系??? 作者: zhan ...
- 数据库中触发器的作用是什么?
数据库中触发器的作用是什么? 什么是触发器 触发器是一种特殊的存储过程,只能由事件驱动调用,而无法直接调用. 触发器有什么用 当对数据库的相关对象(数据库.表.视图)进行某些特定的操作时,数据库会自动 ...
- 数据库中触发器的作用,规则和限制
触发器--看到这个名字总是会想到数电中学过的触发器,有输入端和输出端,根据电平的高低来触发. 数据库中的触发器是个特殊的存储过程,主要是通过事件进行触发而被执行的,而存储过程可以通过存储过程名称而被直 ...
- mysql中触发器有什么作用_数据库触发器有什么作用?
展开全部 触发器的作用: 自动计算数据值,如果数据的值达到了一定的要求,则进行特32313133353236313431303231363533e78988e69d8331333431363034定的 ...
最新文章
- pandas.DataFrame删除/选取含有特定数值的行或列实例
- sql查询百分之20到百分之40的数据_拼多多面试题:如何查找前20%的数据?
- ubuntu修改登陆用户名称_修改ubuntu的用户名(注意用户名和主机名的区别)
- Cisco网络设备搭建×××服务器的全部过程
- 代码生成工具随笔(3)---占领最后一块黄金宝地
- 嵌入式linux文件系统启动,嵌入式Linux之文件系统启动分析【原创】
- django-学习索引1908版
- VGG Pool5 Feature Map特征提取
- Springboot整合一之Springboot整合RabbitMQ
- Unity C#笔记 委托事件
- vue-cli3.0升级失败,vue-cli卸载不掉,vue-cli升级不了3.0,
- 《RunningMan》评论及弹幕情感分析
- Ubuntu系统 不使用snap安装firefox,使用firefox官网下载的安装包安装firefox
- 小写数字转换成大写数字
- 《石头迷阵》游戏业务数据设计、游戏功能制作、游戏界面绘制
- java mysql 生僻字 乱码_mysql 生僻字乱码
- 开发企业架构的实用指南
- Photoshop cc 2018基础
- 学技术总是很慢,你得培养这些个技巧!
- Android adb命令行调试技巧