SELECT FOR UPDATE SKIP LOCKED --- 一個未公開但十分有用的特性
SELECT FOR UPDATE SKIP LOCKED 選項是ORACLE的一個未公開的特性,它的含義是SELECT時跳過被鎖的記錄。
考慮下面的例子:
會話1:
SQL> select * from sex_dict ;
SERIAL_NO S SEX_ INPUT_CO
---------- - ---- --------
1 1 男 N
9 0 未知 WZ
2 2 女 N
4 9 未定 WD
SQL> select * from sex_dict where serial_no = 1 for update ;
SERIAL_NO S SEX_ INPUT_CO
---------- - ---- --------
1 1 男 N
會話2:
查詢並鎖住serial_no in (1,2) 的記錄
SQL> select * from sex_dict where serial_no in ( 1, 2) for update ;
此時會話2掛住,直到會話1事務結束。
加上”NOWAIT”選項
SQL> select * from sex_dict where serial_no in ( 1, 2) for update nowait ;
select * from sex_dict where serial_no in ( 1, 2) for update nowait
*
ERROR at line 1:
ORA-00054: resource busy and acquire with NOWAIT specified
因為serial_no = 1的記錄被會話鎖住,所以這個操作沒有成功。
加上SKIP LOCKED選項
SQL> select * from sex_dict where serial_no in ( 1, 2) for update nowait skip locked;
SERIAL_NO S SEX_ INPUT_CO
---------- - ---- --------
2 2 女 N
會話2只鎖住serial_no=2的記錄,跳過serial_no=1的記錄。
這個特性適合例如訊息佇列的操作,當訊息到達時,處理訊息的各個客戶選取並鎖住一個訊息處理,但不能阻塞其它客戶處理訊息。其它客戶則處理沒有被鎖的訊息。這個可以參考的《》
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/9036/viewspace-473/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- SELECT FOR UPDATE SKIP LOCKED --- 一個未公開但十分有用的特性 zt
- SELECT ... FOR UPDATE SKIP LOCKED;
- 1120 11g select for update skip locked
- PostgreSQL DBA(81) - Locks(FOR UPDATE SKIP LOCKED)SQL
- 【引用】 PB絕對有用的未公開函式函式
- MySQL8 非常有用的一個新特性MySql
- select for update
- select for update nowait 與 select for update 區別AI
- oracle select for updateOracle
- PG12中新增:VACUUM命令的SKIP_LOCKED選項
- 11 個很少人知道但很有用的 Linux 命令Linux
- Oracle中select ... for update的用法Oracle
- Oracle中select for update ...一些區別Oracle
- 前端開發技巧-那些不常見但十分有效的小玩意前端
- 關於 select ... for update 和 for update nowaitAI
- 使用select監視update的操作
- ES6的一些有用的小特性
- select for update nowaitAI
- SQL update select語句SQL
- Windows未公開函式揭密——之一 (轉)Windows函式
- [20171123]Skip Locked and ITL slot 2.txt
- UPDATE SET = (SELECT ) 語法的總結
- sql查詢更新update selectSQL
- Kotlin一些十分有用的方法(run、let、with、apply、also、repeat)KotlinAPP
- Default Locking for INSERT, UPDATE, DELETE, and SELECT ... FOR UPDATE (351)delete
- 記一次 MySQL select for update 死鎖問題MySql
- 深入理解SELECT ... LOCK IN SHARE MODE和SELECT ... FOR UPDATE
- 原生JS基礎但比較有用的一些方法總結JS
- c#12 實驗特性Interceptor如何使用的一個簡單但完整的示例C#
- 【Mysql】兩條select for update引起的死鎖MySql
- 【MySQL】select for update 的Row Lock 與Table LockMySql
- 未公開的Windows網路工具 (轉)Windows
- MysqL_select for update鎖詳解MySql
- select for update與autocommit關係MIT
- oracle connection,select,update 工作原理Oracle
- 10 個新的很有用的開發框架框架
- Android未開公API的使用方法AndroidAPI
- Windows XP 六條未公開的秘技(轉)Windows