(重點) MySQL(入門篇16)事務,事務案例。

一、事務

事務有ACDI原則

1.原子性(Atomicy)

要麼都成功,要麼都失敗

2. 一致性(Consistency)

事務前後的數據保持一致

3.持久性(Durability) – 事務提交

事務一旦提交不可逆

4.隔離性 (Isolation)

多個人,同時給張三轉錢的時候,每一筆轉賬開啓一個事務,多個事務相互隔離就是隔離性

二、隔離性產生的數據問題

多個用戶都在操作數據產生的數據問題。

1.髒讀 :一個事務讀取了了另一個事務沒有提交的 數據

1.比如張三和李四同時區銀行取相同賬號的錢,此時賬戶上有1000,李四,取錢1000,數據還沒有提交成功
2.張三以迅雷不及掩耳之勢迅速取錢 1000,此時因爲賬戶的數據還沒有來得及修改,於是,張三查詢餘額的時候還是1000.

2.不可重複讀:多次數據讀取的結果不同 (這個不一定是錯誤)

1.你查看 QQ 的信息,第一次刷新,沒有人給你發信息,第二次刷新,出現了一條信息,2次查詢的結果不一致,因爲第一次刷新的對方還沒有提交成功,就是不可重複讀

3.虛讀(幻讀):在一個事務內讀取到了別人插入的數據,導致前後不一致。

和不可重複讀類似,第一次查詢餘額的時候,是1000 元,然後別人充值了1000 元,你第二次查詢的時候就是 2000 元了,

三、事務的案例模擬

1.建表

1.數據庫 事務銀行 tansactionBank

CREATE DATABASE IF NOT EXISTS `transactionBank`CHARACTER SET utf8 COLLATE utf8_general_ci;

2.表 事務銀行 tansactionBank01

CREATE TABLE IF NOT EXISTS `tansactionBank01`(
`id` INT NOT NULL AUTO_INCREMENT COMMENT "賬號",
`name` VARCHAR(30) NOT NULL COMMENT "名稱",
`money` DECIMAL(9,2) NOT NULL DEFAULT 0 COMMENT "賬戶餘額00.00格式默認爲0",
 PRIMARY KEY (`id`)
)ENGINE = INNODB DEFAULT CHARSET=utf8

3.插入數據:

INSERT INTO `tansactionbank01`
(`name`,`money`)
VALUES
("張三",0),
("李四",1000);

最終效果:
在這裏插入圖片描述

2. 瞭解事務的基本操作

操作 作用 解釋
set autocommit = 0; 關閉自動提交,mysql默認啓動自動提交 使用手動事務之前關閉自動提交事務
set autocommit = 1; 啓動功自動提交 使用手動提交事務之後開啓自動提交事務
start transaction; 開啓一個(組)事務
commit; 提交事務 持久性,提交之後不能回滾了
rollback; 回滾事務 回到最初的起點(有存檔的辦法可回到存檔點但是不常用瞭解即可.)

3. 事務實例:使用事務李四給張三轉賬 500元

-- 1. 關閉自動提交,方便手動提交
SET autocommit = 0;
-- 2.開啓一個(組)新的事務
START TRANSACTION;
-- 3.進行事務轉賬操作
UPDATE `tansactionbank01` SET 
`money` = `money`- 500
WHERE `name` = "李四";

UPDATE `tansactionbank01` SET 
`money` = `money`+ 500
WHERE `name` = "張三";
-- 4. 回滾
ROLLBACK;
-- 4.2 提交
COMMIT;
-- 4.3 提交後再回滾 (數據已經更改持久性,不能回滾成功)
COMMIT;
ROLLBACK;
-- 5.把自動提交恢復爲默認.
SET autocommit = 1;
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章