我得到的僵局,同時運行下面的查詢在Oracle中死鎖在甲骨文
update MYTABLE
set COLUMN1 = COLUMN1 + 589
where COLUMN1 >= 7988
and COLUMN1 <= 7988
update MYTABLE
set COLUMN1 = COLUMN1 + 660
where COLUMN1 >= 7840
爲什麼我會得到一個僵局當這兩個查詢在兩個獨立的事務運行? 我的觀點是第二個查詢將等到第一個查詢完成其事務時隔離被設置爲READCOMMITTED
對不對?
有沒有我可以申請避免死鎖的提示?
注:COLUMN1
是不是在該表中的PK,但是應用程序可確保有沒有重複。
但是,如果第一個事務鎖定了整個表,那麼第二個事件會不會阻塞,直到第一個事務釋放這些鎖? –
@AlexPoole:我認爲你是對的,除非Oracle在塊級鎖定。 –
不,帕特里克,在這種情況下('where where子句存在),整個表將不會被鎖定,只有行的子集將會是。其次,在這種情況下,存在或不存在索引不會有助於避免死鎖(當表與外鍵列上創建的索引之間存在主\明細關係時,存在索引可能會有所幫助) –