select for update用法
select for update 是为了在查询时,避免其他用户以该表进行插入,修改或删除等操作,造成表的不一致性。
Select …forupdate语句是我们经常使用手工加锁语句。通常情况下,select语句是不会对数据加锁,妨碍影响其他的DML和DDL操作。同时,在多版本一致读机制的支持下,select语句也不会被其他类型语句所阻碍。借助for update子句,我们可以在应用程序的层面手工实现数据加锁保护操作。
一般FOR UPDATE用在PL/SQL的游标里,它的作用就是一个行级锁(对游标里所有的记录),如果其他进程要更新这个游标行级锁里的记录,就必须等待当前进程的COMMIT或者回滚。
该语句用来锁定特定的行(如果有where子句,就是满足where条件的那些行)。当这些行被锁定后,其他会话可以选择这些行,但不能更改或删除这些行,直到该语句的事务被commit语句或rollback语句结束为止。
有些时候对于要更新的数据,为了防止其他查询同时修改该数据会用到select for update,即锁定要更新的记录,等待整个事务提交后,才允许其他请求操作该数据。
需注意: for update 会锁定行或者表
区别在于:
当for update的字段为索引或者主键的时候,只会锁住索引或者主键对应的行。
select * from table where id = 1 for udpate 锁定主键id为1的行
select * from table 锁定整张表

浙公网安备 33010602011771号