select * from table where for update 学习

语法

SELECT ... FOR UPDATE [OF column_list][WAIT n|NOWAIT][SKIP LOCKED]; 

of 选定要锁的某列

wait n 等待时间

nowait 不等待

skip locked 跳过锁,也就是不会报资源忙的异常

环境

CREATE TABLE `stttest` (
  `id` bigint(200) NOT NULL DEFAULT '0',
  `data` varchar(200) NOT NULL DEFAULT '0',
  `alter_size` bigint(100) unsigned NOT NULL DEFAULT '0',
  `alter` bigint(100) unsigned NOT NULL DEFAULT '0',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 

输入图片说明

在窗口A 执行: begin ; select * from stttest where id=1;

在窗口二执行:

  1. 当where后面的条件是主键等值,并且查询有结果时为行锁(锁定查询的行)

例如:

select * from stttest where id=1 for update ;

  1. 当指定主键但是查询没有结果的时候,没有锁

例如:

select * from stttest where id=5 for update ;(没有id=5 的结果)

  1. 当模糊匹配主键并且结果有值的时候,表级别锁

例如:

select * from stttest where id>1 for update ;

select * from stttest where id like 1 for update ;

  1. 当where 后面的不是主键的时候,表级别锁

例如:

select * from stttest where data='aaa' for update ;

参数

在窗口二执行:

  1. wait 参数

例如:

select * from stttest where id=1 for update wait 6 ; 在等待6秒后,报资源忙的异常

select * from stttest where id=1 for update nowait ;不等待直接报资源忙的异常

  1. skip lock

例如:

select * from stttest where id=5 for update nowait skip lock ;不等待并且不报资源忙的异常 3. of 参数

select for update of,这个of子句在牵连到多个表时,具有较大作用,如不使用of指定锁定的表的列,则所有表的相关行均被锁定,若在of中指定了需修改的列,则只有与这些列相关的表的行才会被锁定。

转载于:https://my.oschina.net/tingting1127723365/blog/839209

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值