天天看點

MySQL第32課~Transactions事務,認識一下然後建立一個

作者:小餅幹筆記

所有内容收錄在合集~MySQL入門到熟練。歡迎點贊關注我哦~

Transactions事務

先隆重的介紹一下它,有點長

是代表每個工作單元的一組SQL語句。

工作單元:假設有一筆轉賬,先離開你的賬戶,扣款,是第一步

然後進入轉入的賬戶,是第二步。

兩步組合到一起是一個完整的操作,就是工作單元。

使用:對資料庫進行多次更改的時候使用事務

如果存儲一筆訂單,需要兩段語句來進行,插入了訂單記錄,然後插入項目的時候,突然!

伺服器崩壞了!

MySQL第32課~Transactions事務,認識一下然後建立一個

這個時候訂單是有問題的,同時資料庫肯定也是不一緻的,核對也會很麻煩。

然後和前面說的時間,函數,觸發器,存儲過程一樣,他也有自己的特點

1 原子性 (actomicity)

一個事務一定是一個不能分割的最小單元,不管包含多少語句都是,整個事務中的所有操作,隻能是全部送出成功,或者全部失敗,總之就是,不能隻執行其中的一部分操作,這就是事務的原子性。

例子就是上面訂單的例子

2 一緻性(consistency)

資料庫總是從一個一緻性的狀态轉換到另外一個一緻性的狀态。

我們同樣以上面為例子,也就是說,如果其中的一步失敗了,我們的事務就不會送出,做的修改也就不會儲存到資料庫中!可以說,我們的一緻性就是為了事務前後的資料能夠對的上。

3 隔離性(isolation)

一個事務所做的修改在最終送出以前,對其它事務是不可見的。

比如前面用的支付和發票的例子,如果支付的金額改變,但沒有進行送出,在另一個事務看來,就是賬目沒有任何變動。更複雜的隔離後面會講。

4 持久性(durability)

持久性:事務一旦送出就會永久儲存到資料庫中。即使系統崩潰,修改的資料也不會丢失。系統發生奔潰可以用重做日志(Redo Log)進行恢複,進而實作持久性。與復原日志記錄資料的邏輯修改不同,重做日志記錄的是資料頁的實體修改。

統稱ACID

總結

事務就是一組原子性的SQL查詢,獨立的工作單元。我們的事務内的語句,要麼全部執行成功,要麼全部執行失敗!

事務要滿足ACID特性,可以通過Commit送出一個事務,也可以使用Rollback進行復原

建立事務 Create Transactions

首先清空一下前面各種瞎寫的内容,恢複一下狀态。

不同于前面的存儲過程,事件用的是CREATE,事務的建立用的是START

MySQL第32課~Transactions事務,認識一下然後建立一個

先寫用什麼資料庫,然後是start

use sql_store;

start transaction;

接着,已經建立了,下一步就是把訂單插入訂單表,或者說在表格裡加一行

看看這行有什麼列,然後指派,記得加分号,這段完成了

MySQL第32課~Transactions事務,認識一下然後建立一個

然後第二段插入,直接指派,插入最新加入的内容

MySQL第32課~Transactions事務,認識一下然後建立一個

結尾寫commit,告訴MySQL,讓它把所有的更改寫入資料庫,如果其中一個更改失敗,會自動撤銷之前的更改。

這種情況就是事務被退回。

寫完commit;執行,打開表檢測,出現的是tables fetching,不慌,直接退出重新進入即可。

MySQL第32課~Transactions事務,認識一下然後建立一個

同時打開items order進行檢查,也添加成功。

MySQL第32課~Transactions事務,認識一下然後建立一個

案列2

在上面的基礎上,模拟一個第二個語句失敗,同時讓事務退回,第一個語句的更改自動取消。

MySQL第32課~Transactions事務,認識一下然後建立一個

打開最上面一排按鈕的查詢菜單,然後選擇執行目前語句,它的用處是單句執行目前腳本

就是一行一行執行。

最上方的Local instance,關掉會模拟斷開伺服器的場景,比如網絡崩潰了,客戶崩潰了。

如果關掉再重新進行連接配接,還是可以看到剛加入的訂單,但是加不了新的訂單。

ROLLBACK

用于進行錯誤檢查,手動退回事務。還可以撤銷更改哦

MySQL會自動裝好在事物裡面的每一條語句,語句沒有傳回錯誤,就會送出。

出現關鍵字 DELETE,INSERT, UPDATE的時候,MySQL會先把他們裝在事務裡,然後自動送出。由一個自動送出的系統管控,這樣打開他,預設設定是開,是以一有語句執行,就放到這裡,沒有問題就送出。

MySQL第32課~Transactions事務,認識一下然後建立一個

完結~

繼續閱讀