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 而我們在學習事務的時候最複雜也是最...