sql中的for update

时间:2020-09-26 00:11:32 类型:数据库
字号:    

解释:

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



作者:林伟成
链接:https://www.jianshu.com/p/aaee995176ba
来源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。


<