[置顶] update nowait



Oracle中避免排队的唯一方式是使用SELECT ... FOR UPDATE(子句WAIT/NOWAIT)命令。
oracle锁的排队机制:
   请求锁定需要排队。如果某个会话请求一个锁定,但是由于其他会话已经锁定了指定记录或对象而无法获得所需的锁定,那么这个会话将会等待。
   此时,可能多个会话都在等待访问相同记录或对象,在这种情况下,ORACLE会跟踪这些会话请求锁定的顺序。
   如果不希望某个会话在无法获得锁定时进行排队等候,那么避免排队的唯一方式是使用SELECT ... FOR UPDATE(子句WAIT/NOWAIT)命令。
   SELECT ... FOR UPDATE命令会采用专用的模式来选择和锁定记录。
   如果某条记录已被锁定,那么在锁定被释放前,SELECT ... FOR UPDATE语句会像DML语句一样进行排队并挂起会话。
   使用子句NOWAIT或WAIT <n>就可以避免挂起会话,其中<n>是以秒为单位的数值。
  
在SQL SERVER数据库中有update table with(NOLOCK,UPLOCK,ROWLOCK) set 字段 = 值 where ……(没有安装sql server,未经测试)
NOLOCK:NOLOCK可以忽略锁,直接从数据库读取数据。这意味着可以避开锁,从而提高性能和扩展性。但同时也意味着代码出错的可能性存在。
UPLOCK:读取表时使用更新锁,而不使用共享锁,并将锁一直保留到语句或事务的结束。
ROWLOCK:ROWLOCK告诉SQL Server只使用行级锁。

你可能感兴趣的:(sql,nowait,update,update,select,for)