select..for update

Posted 追风逐月

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了select..for update相关的知识,希望对你有一定的参考价值。

select..for update; 给数据库表手动上锁

   这条语句会开启一个session,直到这个session Commit,其他session才能执行更新、插入、删除操作,对查询没有影响,但是这张表再不能开启其他select..for update;

   使用情况:使用count(*)作为流水号字段的值时,在高并发情况下容易出现重复,此时用select..for update;执行插入前锁住这张表来保证流水号不重复,使用时把select..for update;与执行insert、update、delete 的语句放在service(业务层)下一个方法中,如果放在service下的两个以上方法中,controller类调用一个方法结束后会自动执行下commit,达不到锁住表的效果。

this.DaoBase.ExecuteCommand("select * from enrollment_student_info for update");//先开启select..for update把表锁上,后面过来的事物只能先等这个事物执行完了再执行
object res = this.DaoBase.ExecuteScalar("select count(*) from enrollment_student_info");
this.DaoBase.ExecuteNonquery("Insert...");

 

以上是关于select..for update的主要内容,如果未能解决你的问题,请参考以下文章

select..for update

既然没有事务 SELECT FOR UPDATE 是没有意义的,而且事务本身使用锁,那么 SELECT FOR UPDATE 的用例是啥?

显式锁select for update 用法

select for update行锁

Postgres SELECT ... FOR UPDATE 函数

MySQL 之 SELECT FOR UPDATE