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的。如果是通过其他的方式选中行,或者选中的条件不明确包含主键。这个时候会锁表。其他的事务对该表的任意一行记录都无法进行插入或者更新操作。只能读取。

那是一种行级锁,一旦用户对某个行施加了行级加锁,则该用户可以查询也可以更新被加锁的数据行,其它用户只能查询但不能更新被加锁的数据行.如果其它用户想更新该表中的数据行,则也必须对该表施加行级锁.即使多个用户对一个表均使用了共享更新,但也不允许两个事务同时对一个表进行更新,真正对表进行更新时,是以独占方式锁表,一直到提交或复原该事务为止。行锁永远是独占方式锁。
只有当出现如下之一的条件,便释放共享更新锁:
(1)、执行提交(COMMIT)语句;
(2)、退出数据库(LOG OFF)

(3)、程序停止运行。

那么,什么时候需要使用for update?就是那些需要业务层面数据独占时,可以考虑使用for update。场景上,比如火车票订票,在屏幕上显示邮票,而真正进行出票时,需要重新确定一下这个数据没有被其他客户端修改。所以,在这个确认过程中,可以使用for update。这是统一的解决方案方案问题,需要前期有所准备

mysql中 for update 使用相关推荐

  1. Mysql中使用Update From语句

    记录一下mysql中使用Update from 语句更新字段值: 场景是国家行政区划的数据表,字段内容包括: 应用场景中不想使用级联选择,选中下级节点,比如东城区时,直接显示北京-北京市-东城区,因此 ...

  2. MySQL中for update的作用和用法

    一.for update定义 for update是一种行级锁,又叫排它锁. 一旦用户对某个行施加了行级加锁,则该用户可以查询也可以更新被加锁的数据行,其它用户只能查询但不能更新被加锁的数据行. 如果 ...

  3. mysql中不能update与safe update mode 有关

    mysql update safe model 一些问题 转载自: 水牛叔叔 发表于 5年前 阅读 2243 在做数据库实验的时候对mysql表进行UPDATE操作时,mysql给了我一个错误:Err ...

  4. MySQL中update一条record的过程

    在MySQL中,update是原地更新数据,原地更新数据,原地更新数据.重要的事情说3遍.这是不同于PGSQL的. update的具体过程是: (1).先对该条record对应的索引加X锁 (2).将 ...

  5. mysql的更新语句_IT大叔详谈mysql中update语句和delete语句及应用

    学习是一件枯燥的事,你要牺牲自己的业余时间,你要忍受孤独,坚持下来了你就胜利了,学习是一个过程,只要循序渐进,每天进步一点点,只有这样你才能提高进而成功.今天老韩来讲一讲mysql中的update语句 ...

  6. MySQL 中删除的数据都去哪儿了?

    不知道大家有没有想过下面这件事? 我们平时调用 DELETE 在 MySQL 中删除的数据都去哪儿了? 这还用问吗?当然是被删除了啊 那么这里又有个新的问题了,如果在 InnoDB 下,多事务并发的情 ...

  7. mysql有cte吗_在MySQL中使用CTE更新或删除

    新版本的MySQL 8.0现在支持Common Table Expressions. 根据手册: A WITH clause is permitted at the beginning of SELE ...

  8. MS sql server和mysql中update多条数据的例子

    1. MS sql server中使用动态的表名:declare @tableName nvarchar(160) set @tableName = 't_stat_all' declare @sql ...

  9. mysql中的merge into,SQL Server 2008中利用merge into关键实现insert/update自动匹配(类似于MySQL中的For Update关键字)...

    SQL Server 2008中利用merge into关键实现insert/update自动匹配(类似于MySQL中的For Update关键字) 语法请参考: 按照语法编写语句 DECLARE @ ...

最新文章

  1. 向量算子优化Vector Operation Optimization
  2. git submodule的工作原理
  3. Linux 上的数据可视化工具
  4. LeetCode:Island Perimeter - 岛屿周长
  5. 苹果的编程语言--Swift
  6. Python教学视频(二)输出语句的使用
  7. 使用USB驱动虚拟一个声卡
  8. 小白学VUE——实现抖音时钟(NPM方式)
  9. CodeCanyon上的20种最佳WordPress登录表单
  10. IT名企面试:微软笔试题
  11. iis运行html提示500错误,IIS发布网站出现Http—500错误
  12. Ribbon停止维护
  13. Incorrect string value: '\xE5\xA4\xA7\xE5\xB9\x85...' for column' name' at row 1的解决方法
  14. 玩游戏计算机丢失msvcp,计算机丢失msvcp,因计算机丢失msvcp140
  15. 【Java异常】Variable used in lambda expression should be final or effectively final
  16. 【网页制作】jQuery操作css实现设置箭头图片
  17. python ogr_GDAL/OGR概述
  18. 电脑安装win8.1后 前面板没有声音的解决办法
  19. 组合保险策略及相应模拟测算工具----Discrete Hedging: Guaranteed CPPI Structures
  20. 修改源码实现小程序UI库iview weapp的modal组件自定义宽高

热门文章

  1. Process打开文件
  2. Java程序实现密钥库的维护
  3. POJ 2723 2-SAT
  4. 使用Blend开发Silverlight VSM
  5. group by和order by在springboot中连用03
  6. 走进我的交易室08_有条理的交易者
  7. 32岁领导的忠告:别把报表不当回事,早点放弃Excel才是出路
  8. 从中台、数仓与元数据不为人知的3个角度,看数据管理的生与死
  9. 中小企业如何建立商业智能
  10. vue页面按钮点击后,呈现loading加载状态