關於資料庫事務處理的一些問題總結

王林
發布: 2019-08-19 11:05:49
原創
1675 人瀏覽過

關於mysql事務處理的一些總結:

1、什麼是事務?

MySQL 交易主要用於處理操作量大,複雜度高的資料。

比如說,在人員管理系統中,你刪除一個人員,你即需要刪除人員的基本資料,也要刪除和該人員相關的信息,

如信箱,文章等等,這樣,這些資料庫操作語句就構成一個事務!

2、事務使用的條件

MySQL要使用事務,需要MySQL中的儲存引擎支援.目前目前MySQL內建的儲存引擎支援事務的有InnoDBNDB cluster,

#第三方的儲存引擎有PBXTXtrDB.

3、事務有什麼特徵

3-1、原子性

一個事務必須被當作一個不可分割的最小工作單元,每個事務中的所有操作必須要么成功,或者要么失敗,

永遠不可能一些操作失敗,一些操作成功,這就是所謂的原子性的概念.

#3-2、一致性

一致性就像上面舉的一個例子一樣,當發生異常情況下,資料仍然是正確的.就是說當一個事務執行失敗了,

資料之間是不會受異常的情況而影響,永遠保持著他的正確性.

3-3、隔離性

#當一個交易還未提交,每個交易之間是相互隔離的,互不受到影響.

#3-4、持久性

當一個交易進行提交之後,發生的變更就會永遠保存在資料庫中.

4、交易的隔離等級

4-1、未提交讀取

一個事務中對資料所做的修改,即使沒有提交,這個修改對其他的事務仍是可見的,這種情況下就容易出現髒讀,影響了資料的完整性.

4-2、讀取提交

一個交易開始時,只能看見其他已經提交過的交易.這種情況下容易出現不可重複讀取(兩次讀取的結果不一樣).

4-3、可重複讀取

多次讀取記錄的結果都是一致的,可重複讀可以解決上面的不可重複讀取的情況.但是有這樣一種情況,

當一個事務在讀取某個範圍的記錄時,另外一個事務在這個範圍內插入了一條新的數據,當當事務再次進行讀取資料時,

發現比第一次讀取記錄多了一條,這就是所謂的幻讀,兩次讀取的結果不一致.

4-4、可串行

串行就像一個隊列一個樣,每個事務都是排隊等候執行,只有前一個事務提交之後,下一個事務才能進行操作.

這種情況雖然可以解決上面的幻讀,但是他會在每一條數據上加一個鎖,容易導致大量的鎖超時和鎖競爭,

特別不適用在一些高並發的業務場景下.

4-5、隔離性總結

#透過上面的舉例,我們不難發現.髒讀和不可重複讀重在更新資料,然後幻讀重在插入資料.

5、多種儲存引擎時事務的處理方式

根據上面事務使用的條件,我們可以得知有的儲存引擎是不支援交易的,例如MyISAM儲存引擎就不支援.

那如果在一個事務中使用了事務性的儲存引擎和非事務性的儲存,提交是可以正常進行,

但是回滾非交易性的儲存引擎則會顯示回應的錯誤訊息,具體資訊和儲存引擎有關.

6、如何使用事務

MySQL中事務隱式開啟的,也就是說,一個sql語句就是一個事務,當sql語句執行完畢,事務就提交了.在演示的過程中,我們明確開啟.

7、mysql的自動提交

上面提到了MySQL中事務是隱式開啟的,則代表我們每一個sql是自動提交的,需要關閉則需要設定autocommit選項.

8、設定交易的隔離等級

set session transaction isolation level 隔离级别;
登入後複製

以上是為大家準備的關於資料庫事務處理的一些相關問題,更多相關問題請上PHP中文網相關文章。謝謝!

推薦資料庫相關影片:https://www.php.cn/course/list/51/type/2.html

以上是關於資料庫事務處理的一些問題總結的詳細內容。更多資訊請關注PHP中文網其他相關文章!

相關標籤:
來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
最新問題
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!