1. 事務的基本介紹
-
1. 概念:
* 如果一個包含多個步驟的業務操作,被事務管理,那么這些操作要么同時成功,要么同時失敗, -
2. 操作:
1. 開啟事務: start transaction;
2. 回滾:rollback;
3. 提交:commit; -
3. 例子:
創建一個account表
-- 創建資料表
CREATE TABLE account(
id INT PRIMARY KEY AUTO_INCREMENT,
NAME VARCHAR(10),
balance DOUBLE
);
-- 添加資料
INSERT INTO account (NAME,balance) VALUES
('zhangsan',1000),('lisi',1000);
例子: 張三給李四轉賬500
-- 0.開啟事物
START TRANSACTION;
-- 1.張三賬戶 -500
UPDATE account SET balance = balance - 500 WHERE NAME = 'zhangsan';
-- 2.李四賬戶 +500
出錯了...
UPDATE account SET balance = balance + 500 WHERE NAME = 'lisi';
開啟兩個SQLyog視窗
出錯,錢被吞

-- 0.開啟事物
START TRANSACTION;
-- 1.張三賬戶 -500
UPDATE account SET balance = balance - 500 WHERE NAME = 'zhangsan';
-- 2.李四賬戶 +500
出錯了...
UPDATE account SET balance = balance + 500 WHERE NAME = 'lisi';
-- 發現出問題了,回滾事務
ROLLBACK;
發現出錯,回滾事物

沒有出錯,提交事務
-- 0.開啟事物
START TRANSACTION;
-- 1.張三賬戶 -500
UPDATE account SET balance = balance - 500 WHERE NAME = 'zhangsan';
-- 2.李四賬戶 +500
-- 出錯了...
UPDATE account SET balance = balance + 500 WHERE NAME = 'lisi';
-- 發現執行沒有問題,提交事物
COMMIT;
事物提交前

事物提交后

在這里,上圖中左邊的視窗儲存臨時資料,至于為什么左邊的視窗資料改變了,而右邊的視窗資料依舊未改變?
則是因為MySQL資料庫中事務默認自動提交,下面來詳細闡述:
- 4. MySQL資料庫中事務默認自動提交
事務提交的兩種方式:
-
自動提交:
* mysql就是自動提交的
* 一條DML(增刪改)陳述句會自動提交一次事務,【MySQL 默認每一條 DML(增刪改)陳述句都是一個單獨的事務,每條陳述句都會自動開啟一個事務,陳述句執行完畢自動提交事務,MySQL 默認開始自動提交事務】
案例演示:1. 將金額重置為 2000 2. 更新其中某一個賬戶 3. 使用 當前SQLYog 查看資料庫:發現資料已經改變, 重新打凱SQLYog查詢,發現資料依舊改變了, 使用cmd命令查詢,資料也是改變了


-
手動提交:
* Oracle 資料庫默認是手動提交事務
* 需要先開啟事務,再提交
* 手動提交事務的 SQL 陳述句開啟事務 start transaction; 提交事務 commit; 回滾事務 rollback;- 手動提交事務使用程序:
- 執行成功的情況: 開啟事務 ->執行多條 SQL 陳述句 ->成功提交事務
- 執行失敗的情況: 開啟事務 -> 執行多條 SQL 陳述句 -> 事務的回滾

案例演示:
張三給李四轉 500 元錢(成功) 目前資料庫資料如下:

1) 使用 DOS 控制臺進入 MySQL
2) 執行以下 SQL 陳述句: 1.開啟事務, 2.張三賬號-500, 3.李四賬號+500
3) 使用 SQLYog 查看資料庫:發現資料并沒有改變
4) 在控制臺執行 commit 提交事務:
5) 使用 SQLYog 查看資料庫:發現資料改變
沒有執行commit,使用使用 SQLYog 查看資料庫結果


執行commit后


-
修改事務的默認提交方式:
* 查看事務的默認提交方式:SELECT @@autocommit; – 1 代表自動提交 0 代表手動提交

- 修改默認提交方式: set @@autocommit = 0;

- 修改默認提交方式: set @@autocommit = 0;
此后要是再使用DML(增刪改)陳述句不會再自動提交事物,更新表內內容后,不執行commit陳述句提交事務,資料不改變,
事物回滾
這里將事物回滾單列出來,再舉個例子,方便大家理解,
案例演示 :事務回滾
模擬張三給李四轉 500 元錢(失敗) 目前資料庫資料如下

1) 在控制臺執行以下 SQL 陳述句:1.開啟事務, 2.張三賬號-500
2) 使用 SQLYog 查看資料庫:發現資料并沒有改變
3) 在控制臺執行 rollback 回滾事務:
4) 使用 SQLYog 查看資料庫:發現資料沒有改變




總結: 如果事務中 SQL 陳述句沒有問題,commit 提交事務,會對資料庫資料的資料進行改變, 如果事務中 SQL陳述句有問題,rollback 回滾事務,會回退到開啟事務時的狀態,
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/197014.html
標籤:java
上一篇:網路設備自動巡檢工具(四)——Timer控制元件的靈活使用【2020-10-29】
下一篇:七人表決器VHDL語言
