mysql4.X的for update

 
在MySQL中,可以使用select ... for update来锁定数据。不过这个用法有一些注意事项:
 
1) for update 是基于InnoDB的;
2) for update 必须在事务块中才能生效;
    start transaction;
    select ...... for update;
    commit;
3) 由于InnoDB的预设值是 Row-Level Lock, 所以如果:
    一个InnoDB的表设定了 primary key;
    在select语句中使用了明确的主键;
才能执行Row-Level Lock,否则会执行Table-Level Lock。
 
例如:
1) 明确指定主键,且有此记录;
select * from Table1 where PK_field=22 for update;
这样是Row-Level Lock;
 
2) 明确指定主键,且无此记录;
select * from Table1 where PK_field=22 for update;
这样是non-lock;
 
3) 不明确指定主键;
select * from Table1 where PK_field!=22 for update;
或者
select * from Table1 where PK_field like '22' for update;
这样是table-Level Lock;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值