Mysql的事物簡介

2021-09-02 23:33:53 字數 2492 閱讀 7336

以下是銀行賬戶表t_act(id、賬號、餘額),進行轉賬操作:

idactno

balance11

6002

2100

假如1給2轉賬100,那兩個人的賬戶資訊就需要執行以下sql:

update t_act set balance=400 where actno=1;

update t_act set balance=200 where actno=2;

以上兩條dml語句必須同時成功或者同時失敗。最小單元不可再分,當第一 條dml語句執行成功後,並不能將底層資料庫中的第乙個賬戶的資料修改,只 是將操作記錄了一下;這個記錄是在記憶體中完成的;當第二條dml語句執行成 功後,和底層資料庫檔案中的資料完成同步。若第二條dml語句執行失敗,則 清空所有的歷史操作記錄,要完成以上的功能必須借助事務。

一、事物四大特徵(acid)

二、和事務相關的兩條重要的sql語句(tcl)

三、事務開啟的標誌?事務結束的標誌?

開啟標誌: - 任何一條dml語句(insert、update、delete)執行,標誌事務的開啟。

結束標誌(提交或者回滾):

-  提交:成功的結束,將所有的dml語句操作歷史記錄和底層硬碟資料來一次同步。

-  回滾:失敗的結束,將所有的dml語句操作歷史記錄全部清空。

四、事物與資料庫底層資料

在事物進行過程中,未結束之前,dml語句是不會更改底層資料,只是將歷史操作 記錄一下,在記憶體中完成記錄。只有在事物結束的時候,而且是成功的結束的時候, 才會修改底層硬碟檔案中的資料。

五、事物提交與回滾

在mysql中,預設情況下,事務是自動提交的,也就是說,只要執行一條dml語句就開啟了事物,並且提交了事務。

以上的自動提交機制是可以關閉的 。

對t_user進行提交和回滾操作

提交操作(事務成功)

回滾操作(事務失敗)

六、事務四大特性之一————隔離性(isolation)

事物之間是具有一定隔離性的,隔離性有四個級別:

讀未提交:read uncommitted

- 事物a和事物b,事物a未提交的資料,事物b可以讀取到

- 這裡讀取到的資料叫做「髒資料」

- 這種隔離級別最低,這種級別一般是在理論上存在,資料庫隔離級別一般都高於該級別

讀已提交:read committed

- 事物a和事物b,事物a提交的資料,事物b才能讀取到

- 這種隔離級別高於讀未提交

- 換句話說,對方事物提交之後的資料,我當前事物才能讀取到

- 這種級別可以避免「髒資料」

- 這種隔離級別會導致「不可重複讀取」

- oracle預設隔離級別

可重複讀:repeatable read

- 事務a和事務b,事務a提交之後的資料,事務b讀取不到

- 事務b是可重複讀取資料 - 這種隔離級別高於讀已提交

- 換句話說,對方提交之後的資料,我還是讀取不到

- 這種隔離級別可以避免「不可重複讀取」,達到可重複讀取

- 比如1點和2點讀到資料是同乙個 - mysql預設級別

- 雖然可以達到可重複讀取,但是會導致「幻像讀」

序列化:serializable

- 事務a和事務b,事務a在運算元據庫時,事務b只能排隊等待

- 這種隔離級別很少使用,吞吐量太低,使用者體驗差

- 這種級別可以避免「幻像讀」,每一次讀取的都是資料庫中真實存在資料,事務a與事務b序列,而不併發

如何配置事物隔離級別?

①在my-default.ini中的[mysqld]下新增transaction-isolation = 隔離級別,如:transaction-isolation = read-committed

② 隔離級別也可以對當前session動態設定,應使用set transaction isolation level語句,     如:set transaction isolation level repeatable read;

如何設定隔離級別的作用範圍?

會話級: set transaction isolation level read committed; 或: set session transaction isolation level read committed;

全域性級: set global transaction isolation level read committed;

如何檢視隔離級別?

select @@tx_isolation;

MySQL事物系列 1 事物簡介

1 事物是一組sql的集合,要麼都執行,要麼都不執行。有acid4個特性,即 原子性 一致性 隔離性 永續性。a atomicity 原子性 整個事物是不可分割的工作單位。c consistency 一致性 是指事物將資料庫從一種狀態變為另外一種狀態。在事物之前和事物之後,資料庫的完整性約束沒有被破...

Spring 事物概念簡介

事物,從資料庫的學習中可以知道,事物必須遵循acid原則,摘於資料庫教材和自己的總結 即 1 原子性 操作這些指令時,要麼全部執行,要麼乙個不執行,即不存在命令執行一部分的情況,一旦出錯即會滾到出事狀態 2 一致性 事物隔離執行時要保持資料庫的一致性。也就是說事務執行結果必須使事物從乙個狀態轉變到另...

事物隔離層簡介

隔離性是交易的保證之一,表示交易與交易之間不互相干擾,好像同時間就只有自己的交易存在一樣,隔離性保證的基本方式是在資料庫層面,對資料庫或相關字段鎖定,在同一時間內只允許乙個交易進行更新或讀取。先來看看沒有對資料庫進行鎖定下,可能發生的問題 基本上就是指某個交易對欄位進行更新的資訊,因另乙個交易的介入...