select for update

set autocommit=0;

select * from lock in share mode; (不加where 则锁定所有记录共享锁)

 当前会话可以更新删除 插入记录

其他会话可以select lock in share mode,select, 不能更新删除 锁定的行或者表 必须等待当前会话commit rollback (注意 select for update 可能加的是表锁)

select * from t for update;

当前会话更新插入删除

其他会话可以select , (在数据库 默认可重复读隔离级别)

lock in share mode,for update, update,delete则需要等待。因为当前会话已经锁定的行或者表,等待当前会话commit rollback



注意mysql的行锁 是针对索引条件检索的,如果检索字段木有索引,则加表锁(oracle是对数据加锁)


session1:

select * from where id=2 for update

session2:

select * from where name=2

如果以上两个会话使用不同索引检索字段,但是对应同一个记录 也会最终冲突(使用索引字段 但是执行计划 会根据情况选择全表扫描 则依然是表锁)



注意字符串类型 使用数值 胡自动抛弃索引检索,改用全表

session1

select * from where id=1 for update

session2

select * from where id=1 for update (如果id=1的记录不存在 则 session2 不会阻塞)

select * from table_sfu where a = 1 for update wait 3; 可以控制锁等待多少秒


http://blog.csdn.net/xifeijian/article/details/20313977 (此文章中有部分错误)

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值