MySQL的事務 詳解

2021-10-07 11:45:41 字數 1613 閱讀 1026

1、在springboot中,在service下的方法上,用註解@transactional。

2、開啟事務後,一直不提交事務,會自動提交嗎?有沒有設定超時時間?

3、以下這種情況,如果新增語句出現錯誤,不會提交,事務是怎麼回滾的?

4、一次會話就是一次連線mysql資料庫,那麼在生產中,一次會話是什麼樣的?

start

transaction

;insert

into tb_test values(1

,'tom');

insert

into tb_test values(2

,'cat');

insert

into tb_test values(3

,'jerry');

commit

;

3.2.1、提交事務是:dml語句執行完後和底層硬碟的資料進行一次同步。

3.2.2、回滾事務是:dml語句執行完的資料是在記憶體中,回滾事務是清除所有在記憶體中執行的dml語句。方式一:

start

transaction

;dml語句...

dml語句...

commit

;#成功結束

start

transaction

;dml語句...

dml語句...

rollback

;#失敗結束

方式二:(本方式只使用一次會話)
show variables like

'%char%'

;#檢視字元

show variables like

'%commit%'

;#檢視是否自動提交事務

set autocommit =

off;

setsession autocommit =

off;

setsession autocommit =on;

setsession autocommit =

on;

5.1.1、事務a未提交的資料,事務b可以讀取到。讀取到的資料是「髒資料」,資料庫一般預設級別要高於該級別。5.2.1、事務a提交的資料,事務b才能讀到。解決了讀未提交。但是做不到「可重複讀」(該事務不管什麼時候讀,讀到資料都不一樣)(比如一家銀行,月底要進行一次算總賬,並且執行這段語句需要30分鐘,但是你要在這30分鐘之前和之後讀到的資料要一樣。所以要做到可重複讀)5.3.1、事務a讀取到的資料,在什麼時候讀,讀到的資料都是一樣的。因為事務a讀的是快取中的資料。(但是他不能解決「幻象讀」)5.4.1、事務之間是排隊執行的,並且讀到資料是持久化後的資料。就是只有事務a執行完,才能進行事務b。不再是併發。

5.4.2、這個一般不用,吞吐量不大。(高併發效率不高)

show variables like

'%tx_isolation%'

;

隔離級別

丟失更新

髒讀不可重複讀

幻讀read uncommitted×√

√√read committed××

√√repeatable read(預設)××

×√serializable××

××

MYSQL的事務詳解

事務 事務指邏輯上的一組操作,組成這組操作的各個單元,要麼全部成功,要麼全部不成功。a mysql引擎是支援事務的 b mysql預設自動提交事務。每條語句都處在單獨的事務中。c 手動控制事務 開啟事務 start transaction begin 提交事務 commit 回滾事務 rollbac...

mysql事務詳解

使用者訪問資料庫時,資料庫會為使用者開啟乙個程序,使用者可以通過這個程序對資料庫進行增 刪 改 查的操作,這個程序就稱為事務。1 原子性 指事務是乙個不可分割的工作單位,事務中的操作要麼都發生,要麼都不發生 例如 在乙個事務中,對t1表新增乙個資料,並對t2表刪除乙個資料,這兩步操作要麼都成功,要麼...

MySQL 事務詳解

mysql 事務主要用於處理操作量大,複雜度高的資料。比如說,在人員管理系統中,你刪除乙個人員,你既需要刪除人員的基本資料,也要刪除和該人員相關的資訊,如信箱 文章等等,這樣,這些眾多的資料庫操作語句就構成乙個事務!一般來說,事務必須滿足以下 4 個條件 acid 而我們在學習事務的時候最複雜也是最...