此更新是否会导致oracle 10g出现死锁

时间:2015-09-18 20:45:27

标签: oracle deadlock isolation-level database-deadlocks

我遇到了这个更新声明,并想知道内部工作是如何进行的。它更新了一个也在更新的where子句中使用的列。

理想情况下,这应该分两步完成,还是oracle会自动处理它?<​​/ p>

UPDATE TBL1 SET DATE1=DATE2 WHERE DATE2> DATE1

1 个答案:

答案 0 :(得分:2)

Oracle会自动处理它。有效地,当它运行更新时,Oracle执行以下步骤:

  1. 查询表 - 即评估表中每行的WHERE子句谓词

  2. 对于步骤1返回的每一行,按照SET子句更新它。每列的值是提取的值。

  3. 出于这个原因,完全可以运行这样的更新来交换列的值:

    public function logout(){
    $this->load->library('HybridAuthLib');
    $service = $this->hybridauthlib->logoutAllProviders();
    }
    

    如果另一个会话尝试更新或删除其中一个相同的行,则可能会阻止更新。死锁是可能的,但Oracle会通过回滚其中一个会话并引发异常来自动解决这些问题。