只有 innodb 、bdb引擎支援事務
如果在執行mysql事務中 一次執行多條sql語句 其中有一條sql語句的表引擎並不支援事務操作 那麼 事務約束將對這條sql語句無效 換句話說 就是 事務執行完成 不管是 rollback 還是 commit 這條語句都不能回滾或者提交 而是在執行這條語句的時候 這張表就發生改變了
你可以在同乙個語句中合併事務安全和非事務安全表來獲得兩者最好的情況。儘管如此,在autocommit被禁止掉的事務裡,變換到非事務安全表依舊即時提交,並且不會被回滾。
什麼是事務
一組sql語句操作單元
組內所有sql語句完成乙個業務
如果整組成功 意味著全部sql都實現
如果其中任何乙個失敗 意味著整個操作都失敗
失敗 意味著整個過程都沒意義 資料庫回到操作前的初始狀態
符合以上特性的 就是事務
事務的特點
1.原子性 atomicity
2.一致性 consistency
3.隔離性 isolation
4.永續性 durability
acid 屬性
如果處理
失敗後 可以回到原來的位置
沒成功之前 別的使用者 (程序 會話) 是不能看到操作內的資料修改的
思路
就是在一組操作之間設定乙個記號 備份點
每當執行一次的時候 就會儲存在乙個事物日誌裡面
如果成功就將結果提交到資料庫內 意味著改變了資料庫內容
所以sql執行分成2個階段
1.執行階段
2.將執行結果提交到資料庫
其中我們的事務日誌,就是儲存執行階段的結果
如果使用者選擇提交 才將執行結果提交到資料庫
實現
我們思考下 預設的sql執行方式 自動提交 執行sql完畢 自動完成提交工作
所以 要先關閉 mysql的自動提交
存在乙個系統變數 autocommit 可以對自動提交進行配置 檢視這個變數 show variables like 'autocommit';
關閉自動提交 set autocommit = 0;
再此基礎上執行完所有的sql語句
判斷是否都成功 (出現錯誤 包括語法錯誤 和邏輯錯誤 伺服器錯誤)
成功 commit; 這個語句就1個單詞
失敗 rollback; 這個語句就乙個單詞
但是 直接設定 autocommit 很麻煩
所以常見的使用方法是 start transaction;
成功 commit
失敗 collback
這個有個特點 就是事務接觸了 不管是commit 或者是collback 都會把autocommit回到原來的狀態
demo:
create table a (
id int primary key auto_increment,
a_money decimal(10,2) comment '班費'
);insert into a values(null,1250);
create table b (
id int primary key auto_increment,
b_money decimal(10,2) comment '生活費'
);insert into b values(null,5000);
start transaction;
update t2 set b_money=b_money-30 where id = 1;
commit || collback;
MySQL事務處理
start transaction,commit和rollback語法 start transaction begin work commit work and no chain no release rollback work and no chain no release set autocom...
mysql事務處理
mysql的事務處理主要有兩種方法 1.用begin,rollback,commit來實現 begin開始乙個事務 rollback事務回滾 commit 事務確認 2.直接用set來改變mysql的自動提交模式 mysql預設是自動提交的,也就是你提交乙個query,就直接執行!可以通過 set ...
mysql事務處理
事務都應該具備acid特徵。所謂acid是atomic 原子性 consistent 一致性 isolated 隔離性 durable 持續性 四個詞的首字母所寫,下面以 銀行轉帳 為例來分別說明一下它們的含義 1 原子性 組成事務處理的語句形成了乙個邏輯單元,不能只執行其中的一部分。換句話說,事務...