事務是乙個完整的業務邏輯單元,不可再分。
例如:銀行轉賬,a–>b轉賬10000,需要執行兩條update語句。
update t_act set balance = balance - 10000 where actno = 'act-001'
update t_act set balance = balance + 10000 where actno = 'act-002'
以上的dml語句必須同時成功,或者同時失敗,不允許單條成功或者單條失敗。
為了保證以上語句同時成功或者同時失敗,就需要使用資料庫的事務機制。
這三個語句都會直接運算元據庫表中的「資料」.
事務的存在是未了保證資料的完整性、安全性。
但是顯示業務中,通常有多步操作完成,所以需要事務。
a:原子性:事務是最小的工作單元,不可再分。
c:一致性:事務必須保證多條dml語句同時成功或者同時失敗。
i:隔離性:事務a與事務b之間具有隔離。
d:永續性:最終資料必須持久化到硬碟檔案中,事務才算成功。
事務隔離性存在隔離級別:4層
讀未提交(read uncommitted)
對方事務還沒有提交,我們當前事務可以讀取到對方未提交的資料。
讀未提交存在髒讀(dirty read)現象:表示讀到了髒的資料。
讀已提交資料(read committed)
對方事務提交之後的資料我方可以讀取到。
讀以提交存在的問題是:不可重複讀。
可重複讀(repeatable read)
這種隔離級別解決了:不可重複讀問題。
這種隔離級別存在的問題是:讀取到的資料是幻象
序列化讀/序列化讀
解決了所有問題。
效率低需要事務排隊。
mysql事務預設情況下是自動提交。
只要執行任意一條dml語句則提交一次。
關閉自動提交start transaction;
drop
table
ifexists t_user;
create
table t_user(
id int
primary
keyauto_increment
,username varchar
(255))
;insert
into t_user(username)
values
("zhangsan");
-- 事務開始
start
transaction
;-- 回滾 (回滾到事務開始前)
rollback
;-- 提交 (該事務完成)
commit
;
演示-- 檢視事務隔離級別
mysql>
select @@global.tx_isolation;+
-----------------------+
| @@global.tx_isolation|+
-----------------------+
|repeatable
-read|+
-----------------------+
1row
inset
(0.00 sec)
-- 設定成read uncommitted
setglobal
transaction
isolation
level
read
uncommitted
;
mysql知識點歸納 事務篇
願歷盡千帆,歸來仍是少年 簡述何為事務 控制資料的一致性。檢視當前資料庫事務隔離級別 select tx isolation 查詢超過60s的事務 select from information schema.innodb trx where time to sec timediff now trx...
事務 相關知識點
1.關閉自動提交功能。2.演示事務 裡面的事務,主要是針對連線來的。1.通過 x.setautocommit false 來關閉自動提交的設定。2.提交事務 x.commit 3.回滾事務 x.rollback test public void testtransaction catch sqlex...
事務相關知識點
原子性 atomicity 事務中所有操作是不可再分割的原子單位。事務中所有操作要麼全部執行成功,要麼全部執行失敗。一致性 consistency 事務執行後,資料庫狀態與其它業務規則保持一致。如轉賬業務,無論事務執行成功與否,參與轉賬的兩個賬號餘額之和應該是不變的。隔離性 isolation 隔離...