資料庫 Mysql事務的簡單剖析

2021-09-05 10:19:43 字數 1730 閱讀 5292

我是真的不想在csdn上面寫部落格了,但看看其他的**,唉,我還是回來吧。

事務併發產生的問題,事務的隔離級別

指作為單個邏輯工作單元執行的一系列操作,要麼完全地執行,要麼完全地不執行。

然後事務的四大特性也是老生常談了,acid,這我也不說了

然後這幾個特性又是如何實現的,不知道有沒有童鞋想過,涉及到兩個檔案,redo 和 undo 。

具體的就不說了,留到後面咱們討論mvcc的時候,在詳細說明。

開啟方式

自動開啟

在咱們做增刪改的時候,事務就自動開啟提交了,不然你可以用show variables like 'autocommit' 看一下,是不是自動提交。

它又分為兩個級別,global和session,一般情況下咱麼都不和global玩

我們可以用set session autocommit = off/on 來設定是不是自動提交,

手動開啟

開啟:begin / start transaction

提交/回滾:commit / rollback

事務併發產生的三大問題髒讀

指,乙個事務中,先後兩次讀取同一條資料,而在此期間有另乙個事務對其進行修改,但沒有提交,而是進行了回滾,那此時第乙個事務就懵逼了。

可重複讀

指,乙個事務中,先後兩次讀取同一條資料,而在此期間有另乙個事務對其進行了修改,並提交了資料,那此時第乙個事務就懵逼了。 

指,乙個事務中,先後兩次讀取某個範圍內的資料,而在此期間有另乙個事務對其進行了插入操作,那此時第乙個事務再一次的懵逼了。

髒讀vs可重複讀:都是乙個事務讀取同一條資料,先後不一致的問題,髒讀為第二個事務回滾了事務,可重複讀為第二個事務提交了事務

可重複度vs幻讀:都是事務提交事務之後產生的問題,可重複讀為update / delete,幻讀為insert

隔離級別

四個隔離級別

read uncommitted(讀未提交)——  不能解決任何問題

read committed(讀已提交)——  解決髒讀問題

repeatable read(可重複讀)——  解決髒讀和重複讀問題,innodb中已解決幻讀問題

serializable(序列化)——  可以解決所有問題

隔離級別的實現方式

第一種:在讀取資料前,對其進行加鎖,組織其他事務對資料進行修改(lbcc)lockbased concurrent control

第二種:生成乙個資料請求時間點的一致性資料快照(snapshot),並用這個快照來提供一定級別(語句級或事務級)的一致性讀取(mvcc)multiversion concurrency control

然後基本上今天的所有內容已經結束了,在最後簡單的總結一下。

事務挺好的,但是在事務併發執行時會有些問題,於是針對這些問題產生了對應的隔離界別,然後隔離級別的實現方式又有兩個,是接下來的兩篇文章將要涉及到的內容。   

hello wrold

mysql資料庫事務詳細剖析

在寫之前交代一下背景吧!做開發也好久了,沒怎麼整理過知識,現在剖析一下自己對資料庫事務的認識,以前用sqlserver,現在轉j a後又用mysql oracle。我這塊就主要解釋一下mysql資料庫事務。其實好多內容適用於各種標準資料庫!直接就進入正文了!不管是做啥都有理論知識,我在這塊也介紹一下...

mysql資料庫事務

維基百科 事務是資料庫管理系統 dbms 執行過程中的乙個邏輯單位,由乙個有限的資料庫操作序列構成。只有innodb和ndb 1 原子性 atomicity 事務中的全部操作在資料庫中是不可分割的,要麼全部完成,要麼全部不執行。2 一致性 consistency 幾個並行執行的事務,其執行結果必須與...

MySQL資料庫事務

文章出處 只有innodb引擎支援事務,下邊的內容均以innodb引擎為預設條件 1 髒讀 2 不可重複讀 3 幻讀 1 讀未提交 read uncommitted 可能產生髒讀 不可重複讀 幻讀 2 讀已提交 read committed 避免了髒讀,可能產生不可重複讀 幻讀 3 可重複讀 rep...