關於mysql裡面的事物 mysql 事物

2021-10-19 04:50:39 字數 3198 閱讀 8776

mysql之事物詳解

一、事務定義

事務:乙個最小的不可再分的工作單元;通常乙個事務對應乙個完整的業務(例如銀行賬戶轉賬業務,該業務就是乙個最小的工作單元)

乙個完整的業務需要批量的dml(insert、update、delete)語句共同聯合完成

事務只和dml語句有關,或者說dml語句才有事務。這個和業務邏輯有關,業務邏輯不同,dml語句的個數不同

事務是一條或多條資料庫操作的集合,在事務中的操作,要麼都執行修改,要麼都不執行

二、理解事務

關於銀行賬戶轉賬操作,賬戶轉賬是乙個完整的業務,最小的單元,不可再分————————也就是說銀行賬戶轉賬是乙個事務

假設有a和b兩個賬戶,a賬戶給b賬戶轉賬100。基本步驟如下:

檢測a賬戶餘額 > 5000元

a賬戶餘額減去 5000元

b賬戶餘額增加 5000元

這幾步要麼都成功,要麼乙個都不成功,否則都會導致資料不一致(5000元不翼而飛)

三、事務四大特徵(acid)

原子性(a):事務是最小單位,不可再分

一致性(c):事務要求所有的dml語句操作的時候,必須保證同時成功或者同時失敗

隔離性(i):事務a和事務b之間具有隔離性

永續性(d):是事務的保證,事務終結的標誌(記憶體的資料持久到硬碟檔案中)

四、關於事務的一些術語

開啟事務:start transaction

事務結束:end transaction

提交事務:commit transaction

回滾事務:rollback transaction

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

開啟標誌:

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

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

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

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

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

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

七、在mysql中,事務提交與回滾

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

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

提交操作(事務成功)

現在有一張student表,欄位為id和name

現在執行插入操作(可以看做是乙個事務a)

insert into student(id,`name`) values(7,'kobe')

第一種情況:使用mysql資料庫預設的自動提交機制

第二種情況:使用手動提交事務機制

執行start transaction命令,自動提交機制就會失效,必須執行commit命令才可以將事務提交成功

現在加上commit命令,再來看看效果

再開乙個視窗,查詢結果如下:

事務回滾(提交失敗)

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

1、事物a和事物b之間具有一定的隔離性

2、隔離性有隔離級別(4個)

讀未提交:read uncommitted

讀已提交:read committed

可重複讀:repeatable read

序列化:serializable

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序列,而不併發

九、事務的隔離級別

檢視當前資料庫的隔離級別:select @@tx_isolation

設定事物的隔離級別:

set [global | session] transaction isolation level

其中的可以是:

– read uncommitted

– read committed

– repeatable read

– serializable

• 例如: set session transaction isolation level read uncommitted;

關於channel裡面的策略

關於channel裡面的策略 channel裡面的配置主要在data.data 0 pyload.data.config裡面。config是由groups遞迴形成的。groups的結構如下 groups 下一層 mod policy 當前層發生改變時,需要執行的策略名稱 policies 當前層策略...

關於爬蟲裡面的Cookie

把cookie放到headers中直接登入獲取資料 把cookie單獨拿出來利用字串切割轉換成字典然後放到請求的url中進行請求響應獲取引數 cookie dict requests.get url,headers headers headers,cookies cookie dict a b if...

關於Struts裡面的actionForward

1.actionforward的作用 封裝 路徑,通俗點說就是說完成頁面的跳轉和轉向。那它既然是轉向,到底是 還是重定向呢?預設的情況下,actionforward採用的是 的方式進行頁面跳轉的。2.給自己加深下印象,說一下 和重定向的區別。最大的區別就是 的時候,頁面的url位址不變,而重定向的時...