站長資訊網
最全最豐富的資訊網站

oracle中for update的用法是什么

在oracle中,“for update”是一種行級鎖,用于給某個行施加行級鎖,加鎖的用戶可以查詢和更新數據行,但其他用戶不能查詢和更新被加鎖的行,語法為“SELECT * FROM 表名 WHERE 列名 FOR UPDATE;”。

oracle中for update的用法是什么

本教程操作環境:Windows10系統、Oracle 11g版、Dell G3電腦。

oracle中for update的用法是什么

一、for update定義

for update是一種行級鎖,又叫排它鎖,一旦用戶對某個行施加了行級加鎖,則該用戶可以查詢也可以更新被加鎖的數據行,其它用戶只能查詢但不能更新被加鎖的數據行.如果其它用戶想更新該表中的數據行,則也必須對該表施加行級鎖.即使多個用戶對一個表均使用了共享更新,但也不允許兩個事務同時對一個表進行更新,真正對表進行更新時,是以獨占方式鎖表,一直到提交或復原該事務為止。行鎖永遠是獨占方式鎖。

只有當出現如下之一的條件,才會釋放共享更新鎖:

1、執行提交(COMMIT)語句

2、退出數據庫(LOG OFF)

3、程序停止運行

二、概念和用法

通常情況下,select語句是不會對數據加鎖,妨礙影響其他的DML和DDL操作。同時,在多版本一致讀機制的支持下,select語句也不會被其他類型語句所阻礙。

而select … for update 語句是我們經常使用手工加鎖語句。在數據庫中執行select … for update ,大家會發現會對數據庫中的表或某些行數據進行鎖表,在mysql中,如果查詢條件帶有主鍵,會鎖行數據,如果沒有,會鎖表。

由于InnoDB預設是Row-Level Lock,所以只有「明確」的指定主鍵,MySQL才會執行Row lock (只鎖住被選取的資料例) ,否則MySQL將會執行Table Lock (將整個資料表單給鎖住)。

舉個例子: 假設有張表user ,里面有 id 和 name 兩列,id是主鍵。

例1: (明確指定主鍵,并且數據真實存在,row lock)

SELECT * FROM user WHERE id=3 FOR UPDATE; SELECT * FROM user WHERE id=3 and name='Tom' FOR UPDATE;

例2: (明確指定主鍵,但數據不存在,無lock)

SELECT * FROM user WHERE id=0 FOR UPDATE;

例3: (主鍵不明確,table lock)

SELECT * FROM user WHERE id<>3 FOR UPDATE; SELECT * FROM user WHERE id LIKE '%3%' FOR UPDATE;

例4: (無主鍵,table lock)

SELECT * FROM user WHERE name='Tom' FOR UPDATE;

注意:

1、FOR UPDATE僅適用于InnoDB,且必須在事務處理模塊(BEGIN/COMMIT)中才能生效。

2、要測試鎖定的狀況,可以利用MySQL的Command Mode(命令模式) ,開兩個視窗來做測試。

3、Myisam 只支持表級鎖,InnerDB支持行級鎖 添加了(行級鎖/表級鎖)鎖的數據不能被其它事務再鎖定,也不被其它事務修改。是表級鎖時,不管是否查詢到記錄,都會鎖定表。

三、什么時候需要使用for update?

借助for update語句,我們可以在應用程序的層面手工實現數據加鎖保護操作。就是那些需要業務層面數據獨占時,可以考慮使用for update。

場景上,比如火車票訂票,在屏幕上顯示有票,而真正進行出票時,需要重新確定一下這個數據沒有被其他客戶端修改。所以,在這個確認過程中,可以使用for update。

四、for update悲觀鎖

悲觀鎖:總是假設最壞的情況,每次去拿數據的時候都認為別人會修改,所以每次在拿數據的時候都會上鎖,這樣別人想拿這個數據就會阻塞直到它解鎖。傳統的關系型數據庫里邊就用到了很多這種鎖機制,比如行鎖,表鎖等,讀鎖,寫鎖等,都是在做操作之前先上鎖。就像for update,再比如Java里面的同步原語synchronized關鍵字的實現也是悲觀鎖。

樂觀鎖:顧名思義,就是很樂觀,每次去拿數據的時候都認為別人不會修改,所以不會上鎖,但是在更新的時候會判斷一下在此期間別人有沒有去更新這個數據,可以使用版本號等機制。樂觀鎖適用于多讀的應用類型,這樣可以提高吞吐量,像數據庫提供的類似于write_condition機制,其實都是提供的樂觀鎖。

推薦教程:《Oracle視頻教程》

贊(0)
分享到: 更多 (0)
網站地圖   滬ICP備18035694號-2    滬公網安備31011702889846號
精品国产日韩亚洲一区91| 亚洲精品国产成人中文| 四虎国产精品成人免费久久| 国产精品国三级国产AV| 中文无码精品A∨在线观看不卡| 久久亚洲中文字幕精品有坂深雪| 亚洲精品国偷自产在线| 国产乱子伦精品无码专区| 日韩AV无码精品一二三区| 中文字幕日韩理论在线| 国产三级久久精品三级| 手机国产乱子伦精品视频| 精品少妇人妻AV一区二区| 国产成人综合久久精品红| 91精品国产91热久久久久福利| 99热精品久久只有精品30| 亚洲AV午夜福利精品一区二区| 亚洲中文久久精品无码| 91探花福利精品国产自产在线| 精品国产国产综合精品| 国产麻豆精品入口在线观看| 伊在人亚洲香蕉精品区麻豆| 日韩电影中文字幕| 日韩美女va毛片在线播放| 在线观看亚洲AV日韩AV| 日韩一区二区电影| 日韩精品无码人成视频手机| 亚洲毛片av日韩av无码| 国产日韩AV免费无码一区二区三区 | 日韩福利片午夜在线观看| 亚洲国产日韩在线视频| 日韩电影免费在线观看中文字幕| 日韩精品电影一区亚洲| 四虎永久在线日韩精品观看| 亚洲日韩av无码中文| 日韩一级在线视频| 合区精品中文字幕| 国产精品小黄鸭一区二区三区| 精品人妻伦九区久久AAA片69 | 亚洲精品国产成人中文| 精品无码一区二区三区在线|