通过select * from ta for update方法,可以将查询结果中的记录进行update锁定,及不允许其他进行对这 记录进行修改。
我们还可以通过select * from a for update of a.a;(a表的a列)对记录中的某一列进行锁定。 当我们使用FOR UPDATE子句将记录锁定后,其他进程在对锁定记录进行update或delete操作时,就会处于停顿状态,等待解锁。
当锁定进程释放锁定以后才会继续执行。如果不想其他进行进入停顿状态,可以用nowait子句,直接返回操作异常信息,提示操作的记录处于锁定状态不能进行修改。 所以我们在做多线程同步时,可以通过select * form ta for update nowait的方法防止多个进程同时操作同一数据。 这种锁定方式是建立在数据库连接的基础上,一旦连接断开或者锁定进程commit时,这种锁定就自动解除。 同时这种锁定方式是一种update锁定,锁定时不影响其他的select操作。