Mysql 事務與儲存過程中事務的管理

2021-09-26 23:16:04 字數 2241 閱讀 5204

目標:

1.了解事物的概念,會開啟、提交和回滾事務

2.掌握事物的4種隔離級別

3.學會建立儲存過程

4.學會呼叫、檢視、修改和刪除儲存過程

事務管理

1. 什麼是事務(一條或多條sql語句)

所謂的事物就是針對資料庫的一組操作,可以是一條或者多條sql語句組成,同乙個事務具有同步的特點,如果其中一條無法執行,那麼所有的語句就都不會執行。

2. 事務的4個特性(原子性、一致性、隔離性、永續性)

原子性: 原子性是事務必須被看成是乙個不可分割的最小單元,只有事務中所有的資料庫操作都執行成功,才算整個事務執行成功。如果有乙個事務中任何乙個sql語句執行失敗,已經成功執行的sql語句也必須撤銷。

一致性: 一致性是指事務將資料庫從一種狀態轉變為下一種一致的狀態。比如,在表中姓名字段具有唯一約束,如果乙個事務對姓名字段更改,使姓名不唯一,這就破壞了事務的一致性。如果事務中某個動作失敗,系統可以自動撤銷事務,返回初始化狀態。

隔離性: 隔離性還可以稱為併發控制、可序列化、鎖等,當多個使用者併發訪問資料庫時,資料庫為每乙個使用者開啟的事務,不能被其他事務的運算元據所干擾,多個併發之間要相互隔離。

永續性: 事務一旦提交,其所做的修改就會永久儲存到資料庫中,即使資料庫發生故障也不應該對其有任何影響。

3.事務隔離問題

髒讀:讀取另乙個事務未提交的資料

a賬戶給b賬戶轉賬100元買東西,a賬戶開啟了乙個事物,但不提交,b的隔離級別較低,讀到a中未提交的事物,發現已經收到a的轉賬,發貨給a,b發貨成功後,a將事物回滾。此時b受到損失,這就是髒讀。

不可重複讀:事務中兩次查詢的結果不一致

第一次查詢a賬戶有1000元,第二次查詢b賬戶有900元,原因是統計期間a賬戶取出了100,導致多次統計報表的結果不一致。

幻讀(虛讀): 乙個事務內兩次查詢中資料條數不一致

事物內兩次查詢中資料條數不一致,幻讀和不可重複讀有些類似,同樣是在兩次查詢過程中,不同的是,幻讀是由於其他事物做了插入記錄的操作,導致記錄數有所增加

可序列化:它在每個讀的資料行上加上鎖,使之不可以相互衝突,因此會產生大量的超時現象

最高隔離級別,它在每個讀的資料行上加上鎖,使之不可能相互衝突,因此會導致大量超時的現象

4.事務的隔離級別(讀未提交、讀提交、可重複讀、可串形化)

讀未提交(read uncommitted)

髒讀:事物可以讀到另乙個事物中未提交的資料

事務中最低的級別,該級別下的事務可以讀取到另乙個事務中未提交的資料,也被稱為髒讀。由於該級別低,實際開發中一般很少用。

讀提交(read committed)(oracle預設級別)

重複讀:事務內重複讀取了別人執行緒已經提交的資料,但兩次結果不一致,原因是查詢的過程中其他事務做了更新操作。

幻讀:事務內兩次查詢中資料的條數不一樣,原因是查詢過程中其他的事務做了新增的操作。

該級別下的事務只能讀取其他事務已經提交的內容,可以避免髒讀,但不能避免重複讀和幻讀的情況。

重複讀(repeatable read)(mysql預設級別)

它可以避免髒讀,不可重複讀的問題,確保同一事務的多個例項在併發讀資料時,會看到同樣的資料行。但理論上,該級別會出現幻讀的情況,不過mysql的儲存引擎通過多版本併發控制機制解決了該問題。

可序列化(serializable)

它會強制對事務進行排序,使之不會發生衝突,從而解決髒讀,幻讀,重複讀的問題。實際上,是在每個讀的資料行加鎖。

5.儲存過程的建立

儲存過程就是一條或多條sql語句的集合,當對資料庫進行一系列複雜操作時,儲存過程可以將這些複雜操作封裝成乙個**塊,以便重複使用,大大減少資料庫開發人員的工作量。

6.

7.

8.

9.

10.

儲存過程中事務操作

資料庫中事務主要應用在多條語句的更新操作 插入 修改 刪除 可以保證資料的完整性與正確性。使用原則為盡可能少的影響資料,以免產生死鎖或者占用資源。在儲存過程中如果中間操作有非嚴重的錯誤資訊執行不會中斷,會繼續執行並返回相應結果。但是程式呼叫的話如果不是用 try catch形式則會報錯,出現黃頁。需...

mysql 儲存過程與事務

最近在工作中要實現乙個功能,在乙個php檔案裡有乙個流水號的變數,每次執行這個php的檔案,這個流水號的變數都得不一樣,我就想到用mysql的自增來解決,我寫了乙個儲存過程,create procedure mqsearch in userid int,in type int,out lshs bi...

在儲存過程中實現事務

在圖書館管理系統中系統管理員可以進行的操作有 借 還 新增 刪除 修改圖書或新增 刪除 修改讀者等,很多的操作都涉及到多個表的進行,我們一定要保持資料的一致性。如 刪除讀者 操作,會在讀者表 reader 中進行讀者的刪除,該讀者刪除後,借書表 reader book 也沒有必要再保留該讀者的借書記...