下文主要給大家帶來MySQL和Oracle行鎖區別及用法,希望這些內容能夠帶給大家實際用處,這也是我編輯MySQL和Oracle行鎖區別及用法這篇文章的主要目的。好了,廢話不多說,大家直接看下文吧。
InnoDB
INNODB表是索引組織的表,主鍵是聚集索引,非主鍵索引都包含主鍵信息。
INNODB默認是行鎖。
INNODB行鎖是通過給索引項加鎖來實現的,即只有通過索引條件檢索數據,InnoDB才使用行級鎖,否則將使用表鎖。
InnoDB行鎖實現方式
InnoDB行鎖是通過給索引上的索引項加鎖來實現的,如果沒有索引,InnoDB將通過隱藏的聚集索引來對記錄加鎖。InnoDB行鎖分為3種情形。
Record lock:對索引項加鎖。
Gap lock:對索引項之間的“間隙”、第一條記錄前的“間隙”或最后一條記錄后的“間隙”加鎖。
Next-key lock:前兩種的組合,對記錄及其前面的間隙加鎖。
InnoDB這種行鎖實現特點意味著:如果不通過索引條件檢索數據,那么InnoDB將對表中的所有記錄加鎖,實際效果跟表鎖一樣!
在實際應用中,要特別注意InnoDB行鎖的這一特性,否則可能導致大量的鎖沖突。
Oracle
在Oracle的每行數據上,都有一個標志位來表示該行數據是否被鎖定。這樣就大大減小了行級鎖的維護開銷,數據行上的鎖標志一旦被置位,就表明該行數據被加X鎖,Oracle在數據行上沒有S鎖。
許多對Oracle不太了解的技術人員可能會以為每一個TX鎖代表一條被封鎖的數據行,其實不然。TX的本義是Transaction(事務),當一個事 務第一次執行數據更改(Insert、Update、Delete)或使用SELECT… FOR UPDATE語句進行查詢時,它即獲得一個TX(事務)鎖,直至該事務結束(執行COMMIT或ROLLBACK操作)時,該鎖才被釋放。所以,一個TX 鎖,可以對應多個被該事務鎖定的數據行。
ORACLE的行級鎖 只是數據塊頭的ITL、數據行頭的LB鎖標識位,不需要消耗額外的資源。需要注意的是事務并不是被行阻塞,而是被其它的事務阻塞。所以某些數據庫就有鎖升級機制,而ORACLE沒有。ORACLE的行級鎖 只是數據塊頭的ITL、數據行頭的LB鎖標識位,不需要消耗額外的資源。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。