資料庫的鎖有哪幾種 語句怎麼實現

2021-09-27 04:11:58 字數 1562 閱讀 4316

資料庫是乙個多使用者共享的資源,當多個使用者併發的儲存資料時,資料庫就會產生多個事物同時儲存同一資料的情況。若對併發操作不加控制就可能讀取或訪問不正確的資料,破壞資料的不正確性(髒讀,不可重複讀,幻讀等),可能產生死鎖。為了解決這個問題,加鎖是乙個非常重要的技術,對實現資料庫併發控制是乙個好的方案。簡單來說,當執行sql語句事物前,應向資料庫發出請求,對你訪問的記錄加鎖。在這個事物釋放鎖之前,其他事物不能對這個資料進行更新操作。

mysql資料庫中的鎖有共享鎖、排他鎖、行鎖、表級鎖、行級鎖以及頁面鎖。

共享鎖(s)表示對資料進行讀操作,因此多個事物可以同時為乙個物件加鎖。這個事物釋放鎖之前,其他事物不能對該物件進行更新操作。產生共享鎖的語句是:

select * from t_user lock in share mode;
排他鎖表示對資料進行寫操作,如果乙個事物給乙個物件新增了排他鎖,其他事物就不能給他加其他鎖。產生排他鎖的sql語句如下:

select * from ad_plan for update;
行鎖表示對一條記錄加鎖,只影響一條記錄。通常用在dml語句中,如insert, update, delete等。

innodb行鎖是通過給索引上的索引項加鎖來實現的,這一點mysql與oracle不同,後者是通過在資料塊中對相應資料行加鎖來實現的。

innodb這種行鎖實現特點意味著:只有通過索引條件檢索資料,innodb才使用行級鎖,否則,innodb將使用表鎖!

根據鎖的級別或密度來劃分,mysql有三種鎖的級別:頁級、表級、行級。

表級別的鎖定是mysql各儲存引擎中最大顆粒度的鎖定機制。該鎖定機制最大的特點是實現邏輯非常簡單,帶來的系統負面影響最小。所以獲取鎖和釋放鎖的速度很快。由於表級鎖一次會將整個表鎖定,所以可以很好的避免困擾我們的死鎖問題。

當然,鎖定顆粒度大所帶來最大的負面影響就是出現鎖定資源爭用的概率也會最高,致使並大度大打折扣。

使用表級鎖定的主要是myisam,memory,csv等一些非事務性儲存引擎。

行級鎖定最大的特點就是鎖定物件的顆粒度很小,也是目前各大資料庫管理軟體所實現的鎖定顆粒度最小的。由於鎖定顆粒度很小,所以發生鎖定資源爭用的概率也最小,能夠給予應用程式盡可能大的併發處理能力而提高一些需要高併發應用系統的整體效能。

雖然能夠在併發處理能力上面有較大的優勢,但是行級鎖定也因此帶來了不少弊端。由於鎖定資源的顆粒度很小,所以每次獲取鎖和釋放鎖需要做的事情也更多,帶來的消耗自然也就更大了。此外,行級鎖定也最容易發生死鎖。

使用行級鎖定的主要是innodb儲存引擎。

頁級鎖定是mysql中比較獨特的一種鎖定級別,在其他資料庫管理軟體中也並不是太常見。頁級鎖定的特點是鎖定顆粒度介於行級鎖定與表級鎖之間,所以獲取鎖定所需要的資源開銷,以及所能提供的併發處理能力也同樣是介於上面二者之間。另外,頁級鎖定和行級鎖定一樣,會發生死鎖。

在資料庫實現資源鎖定的過程中,隨著鎖定資源顆粒度的減小,鎖定相同資料量的資料所需要消耗的記憶體數量是越來越多的,實現演算法也會越來越複雜。不過,隨著鎖定資源顆粒度的減小,應用程式的訪問請求遇到鎖等待的可能性也會隨之降低,系統整體併發度也隨之提公升。

使用頁級鎖定的主要是berkeleydb儲存引擎。

Oracle資料庫有哪幾種啟動方式

有以下幾種啟動方式 1 startup nomount 非安裝啟動,這種方式啟動下可執行 重建控制檔案 重建資料庫 讀取init.ora檔案,啟動instance,即啟動sga和後台程序,這種啟動只需要init.ora檔案。2 startup mount dbname 安裝啟動,這種方式啟動下可執行...

實現session共享的方式有哪幾種?

1.基於nfs的session共享 nfs是net filesystem的簡稱,最早由sun公司為解決unix網路主機間的目錄共享而研發。這個方案實現最為簡單,無需做過多的二次開發,僅需將共享目錄伺服器mount到各頻道伺服器的本地session目錄即可,缺點是nfs依託於複雜的安全機制和檔案系統,...

mysql資料完整性分為 資料庫有哪幾種完整性

資料庫有哪幾種完整性 閱讀 262 什麼是資料庫完整性 資料庫完整性可確保輸入至資料庫中的資料,是準確 有效及一致的。資料庫中任何資料改動,都必須乎合所有完整性限制及資料有效性檢驗。1 實體完整性 實體完整性是對關係中的記錄唯一性,也就是主鍵的約束。準確地說,實體完整性是指關係中的主屬性值不能為nu...