事務預設提交被開啟(@@autocommit=1)後,此時不能使用事務回滾,但我們可手動開啟乙個事務處理事件,這樣就可以發生回滾。
使用begin 或者star transaction 手動開啟乙個事務
begin;
update
user
set money=money-
100where name=
'a';
update
user
set money=money+
100where
name=
'b';
由於手動開啟事務沒開啟自動提交
此時發生變化的資料仍然是儲存在乙個臨時資料表中;
select
*from
user;+
----+------+-------+
| id | name | money |
+----+------+-------+|1
| a |
900||2
| b |
1100|+
----+------+-------+
測試回滾
rollback
;select
*from
user;+
----+------+-------+
| id | name | money |
+----+------+-------+|1
| a |
1000||
2| b |
1000|+
----+------+-------+
仍然用commit提交資料,提交後無法再發生本次事務的回滾。
begin
;update
user
set money=money-
100where name=
'a';
update
user
set money=money+
100where name=
'b';
select
*from
user;+
----+------+-------+
| id | name | money |
+----+------+-------+|1
| a |
900||2
| b |
1100|+
----+------+-------+
提交資料
commit
;測試回滾(無效,因為表的資料已經被提交)
rollback
;
事務四大特徵
a 原子性:要求事務是最小單位不可再分割;
c 一致性:要求同一事務中的sql語句,必須保證同時成功或者失敗;
i隔離性:事務1 和 事務2 之間是具有隔離性的;
d永續性:事務一旦結束(commit),就不能再返回(rollback)。
MySQL開啟事務
什麼是事務?事務是邏輯上的一組操作,組成這組操作的各個單元,要不全都成功要不全都失敗,這個特性就是事務 注意 mysql資料支援事務,但是要求必須是innodb儲存引擎 解決這個問題 mysql的事務解決這個問題,因為mysql的事務特性,要求這組操作,要不全都成功,要不全都失敗,這樣就避免了某個操...
NodeJs mysql 開啟事務
如題 node後台使用mysql資料庫,並使用事務來管理資料庫操作。這裡主要講乙個事務的封裝並寫了乙個insert 插入操作。code db.config.js const mysql require mysql const pool mysql.createpool 返回乙個promise鏈結 c...
MVC開啟事務方法
引言 其實事務在資料層 服務層 業務邏輯層多處地方都會使用到,在本篇文章將會為大家一一細說。其中前面四節是事務的基礎,後面的三節是事務的重點,對事務有基礎的朋友可以跳過前面四節。文章有錯漏的地方歡迎各位點評。一 事務的定義 所謂事務,它是乙個操作集合,這些操作要麼都執行,要麼都不執行,它是乙個不可分...