select * from .... for update 使用

2023-05-16

今天看到同事在群里发for update的sql,初步了解下!

 

解释:

for update是在数据库中上锁用的,可以为数据库中的行上一个排它锁。当一个事务的操作未完成时候,其他事务可以读取但是不能写入或更新。


例子:

比如一张表三个字段 , id(商品id), name(商品名字) , count(数量) 
当商品抢购时候会显示剩余商品件数,如果并发量大的时候,商品自减的值可能不准确。所以当我们在一个事务中对count字段进行修改的时候,其他事务应该只能读取指定id的count,而不能进行update等操作。这个时候就需要用到for update.

sql语句:

start transaction ; 
select * from table_name where id =1 for update ;

update table_name set count = count - 1 where id= 1;

此时如果另一个事务也想执行类似的操作:

start transaction ; 
select * from table_name where id =1 for update ; 
//下面的这行sql会等待,直到上面的事务回滚或者commit才得到执行。 
update table_name set count = count - 1 where id= 1;

*注:当选中某一个行的时候,如果是通过主键id选中的。那么这个时候是行级锁。 
其他的行还是可以直接insert 或者update的。如果是通过其他的方式选中行,或者选中的条件不明确包含主键。这个时候会锁表。其他的事务对该表的任意一行记录都无法进行插入或者更新操作。只能读取。*

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

select * from .... for update 使用 的相关文章

随机推荐

  • 由于目标计算机积极拒绝,无法连接的原因

    做网络编程时 xff0c 经常碰到 由于目标计算机积极拒绝 xff0c 无法连接 出现这种情况都有哪些原因呢 xff1f 第一种情况就是要连接的电脑没有开机 xff0c 当然无法连接了 第二种情况 xff0c 就是电脑虽然打开了 xff0c
  • TurboVNC with LightDM+Xfce desktop preparation

    Below shows the script to prepare TurboVNC with LightDM Xfce deskt nbsp TIMESTAMP date Y m d H M S install pkgs yum y gr
  • 头文件为什么只声明而不定义,而类定义又可以在头文件中那

    一 xff0e 头文件为什么只声明而不定义 xff0c 而类定义又可以在头文件中那 xff1f xff1f xff1f 了解基本的概念 xff1a 编译单元 xff1a 对于c语言 xff0c 每一个 c文件就是一个编译单元 仅从编译而言
  • Linux系统中ubuntu,redhat,debain,centos,fedora,suse 区别

    主流的linux系统有 xff1a ubuntu redhat debain centos fedora suse等 redhat是为企业设计的 xff1b fedora是红帽的兄弟 xff0c 比它更新快 xff0c 但不一定稳定ubun
  • 网络编程面试题(2020最新版)

    Java面试总结 xff08 2021优化版 xff09 已发布在个人微信公众号 技术人成长之路 xff0c 优化版首先修正了读者反馈的部分答案存在的错误 xff0c 同时根据最新面试总结 xff0c 删除了低频问题 xff0c 添加了一些
  • 计算机网络 | 构造超网 | CIDR

    目录 一 无分类编址CIDR xff08 构造超网 xff09 1 为什么要使用CIDR 2 网络前缀 3 路由聚合和构成超网 4 CIDO的其他表示方法 5 总结 一 无分类编址CIDR xff08 构造超网 xff09 1 为什么要使用
  • zsh配置(装机自用)

    每次因为重置电脑或者买新电脑或者买服务器 xff0c 总要装zsh和oh my zsh xff0c 之前看的都是别人写好的 xff0c 然后要把好几篇固定常看的连在一起看 xff0c 很烦人 xff0c 干脆自己结合几篇写个自己的步骤 xf
  • 理解之 原型链

    JavaScript 的继承主要通过原型链来继承 继承的主要精髓就是 xff1a 让一个对象的实例等于另一个原型对象 即 span class hljs attribute Super prototype span 61 span clas
  • Docker 容器时间和系统时间存在误差解决方法

    问题描述 xff1a docker容器的时间和系统时间存在8小时误差 xff0c 容器使用UTC时区 xff0c 系统使用CST时区时间 原因分析及解决方法 创建容器的时候就应该使用 v etc localtime 容器名称或者id etc
  • 解决web项目发布新版本需要清除浏览器缓存的问题

    一 bug起因 最近做公司的项目 xff0c 对样式进行了修改后 xff0c 新版本上线 测试那边经常说 xff1a 修改的样式没有生效 xff0c 我都是让他们清下浏览器缓存试试 可是到了正式环境 xff0c 用户 xff08 也就是老总
  • Ubuntu16.04TLS 中终端(Terminal)无法打开的解决办法

    前几天把系统自带的python3 5升级到python3 6 5后就关闭了系统 xff0c 结果今天打开电脑发现终端怎么也打不开了 xff0c 于是从网上找了一些解决办法 xff0c 终于找到一和自己类似情况的解决办法终端无法打开的解决办法
  • Linux命令

    1 访问权限 1 读权限 xff08 r xff09 对文件而言 xff0c 具有读取文件内容的权限 xff1b 对目录来说 xff0c 具有浏览目录的权限 2 写权限 xff08 w xff09 对文件而言 xff0c 具有新增 修改文件
  • curl命令

    目录 一 最常用的curl命令 1 发送GET请求 2 发送POST请求 3 发送json格式请求 xff1a 二 curl命令语法与curl命令参数详解 1 curl命令语法 2 curl命令参数详解 三 Linux curl命令退出码
  • 如何解决IP地址发生冲突故障?

    我们之前发布了关于交换机如何解决IP地址冲突 xff1f 这里面是以实例的方式讲解了如何防止交换机冲突 xff0c 有一些朋友反映这个设置起来有些复杂 xff0c 有没有其它的一些方法呢 xff1f 其实是有的 xff0c 我们今天来看下
  • 运筹帷幄的“懒蚂蚁”

    每个公司都有这样一种人 xff1a 他们工作起来不慌不忙 xff0c 无论客观环境如何影响 xff0c 他们总有自己的节奏 xff0c 战术上看起来满是松弛感 xff0c 但战略上似乎又不是 xff0c 而且这类人 xff0c 也偏偏总能被
  • 最好的生活方式:存钱,运动,读书,早起

    想一想 xff0c 这是不是你的日常 xff1a 明知道跑步能健身 xff0c 却始终迈不开腿 xff1b 嘴上说存钱 xff0c 却还在疯狂购物 xff1b 阅读计划做了一堆 xff0c 却总是安慰自己 xff1a 明天再开始吧 xff1
  • 【业务测试】

    业务测试疑问 xff1a 你觉得业务测试就是点点点吗 xff1f 你觉得业务测试就是依据需求设计case并全部执行通过就OK了吗 xff1f 你觉得业务测试就是功能测试 43 兼容测试 43 性能测试 43 接口测试 43 自动化吗 xff
  • selenium之如何定位iframe中的元素

    今天想写个126邮箱自动化登录脚本 xff0c 由于id是动态的 xff0c name也获取不到 xff0c 最后通过查看页面发现是写在iframe中 xff0c 所以要先获取表单 xff0c 在获取表单中的元素 xff0c 代码如下 xf
  • 无法连接虚拟机网络的情况之---Vmnet8 Net网络连接方式

    最近一直在虚拟机win7系统完loadrunner 昨晚突然想连接linux系统 xff0c 但是发现链接不上之前搭建的集群主机 xff0c 在linux服务器也能ping通www baidu com 但是在宿主机secureCRT链接不到
  • select * from .... for update 使用

    今天看到同事在群里发for update的sql 初步了解下 xff01 解释 xff1a for update是在数据库中上锁用的 xff0c 可以为数据库中的行上一个排它锁 当一个事务的操作未完成时候 xff0c 其他事务可以读取但是不