所有内容收錄在合集~MySQL入門到熟練。歡迎點贊關注我哦~
Transactions事務
先隆重的介紹一下它,有點長
是代表每個工作單元的一組SQL語句。
工作單元:假設有一筆轉賬,先離開你的賬戶,扣款,是第一步
然後進入轉入的賬戶,是第二步。
兩步組合到一起是一個完整的操作,就是工作單元。
使用:對資料庫進行多次更改的時候使用事務
如果存儲一筆訂單,需要兩段語句來進行,插入了訂單記錄,然後插入項目的時候,突然!
伺服器崩壞了!
這個時候訂單是有問題的,同時資料庫肯定也是不一緻的,核對也會很麻煩。
然後和前面說的時間,函數,觸發器,存儲過程一樣,他也有自己的特點
1 原子性 (actomicity)
一個事務一定是一個不能分割的最小單元,不管包含多少語句都是,整個事務中的所有操作,隻能是全部送出成功,或者全部失敗,總之就是,不能隻執行其中的一部分操作,這就是事務的原子性。
例子就是上面訂單的例子
2 一緻性(consistency)
資料庫總是從一個一緻性的狀态轉換到另外一個一緻性的狀态。
我們同樣以上面為例子,也就是說,如果其中的一步失敗了,我們的事務就不會送出,做的修改也就不會儲存到資料庫中!可以說,我們的一緻性就是為了事務前後的資料能夠對的上。
3 隔離性(isolation)
一個事務所做的修改在最終送出以前,對其它事務是不可見的。
比如前面用的支付和發票的例子,如果支付的金額改變,但沒有進行送出,在另一個事務看來,就是賬目沒有任何變動。更複雜的隔離後面會講。
4 持久性(durability)
持久性:事務一旦送出就會永久儲存到資料庫中。即使系統崩潰,修改的資料也不會丢失。系統發生奔潰可以用重做日志(Redo Log)進行恢複,進而實作持久性。與復原日志記錄資料的邏輯修改不同,重做日志記錄的是資料頁的實體修改。
統稱ACID
總結
事務就是一組原子性的SQL查詢,獨立的工作單元。我們的事務内的語句,要麼全部執行成功,要麼全部執行失敗!
事務要滿足ACID特性,可以通過Commit送出一個事務,也可以使用Rollback進行復原
建立事務 Create Transactions
首先清空一下前面各種瞎寫的内容,恢複一下狀态。
不同于前面的存儲過程,事件用的是CREATE,事務的建立用的是START
先寫用什麼資料庫,然後是start
use sql_store;
start transaction;
接着,已經建立了,下一步就是把訂單插入訂單表,或者說在表格裡加一行
看看這行有什麼列,然後指派,記得加分号,這段完成了
然後第二段插入,直接指派,插入最新加入的内容
結尾寫commit,告訴MySQL,讓它把所有的更改寫入資料庫,如果其中一個更改失敗,會自動撤銷之前的更改。
這種情況就是事務被退回。
寫完commit;執行,打開表檢測,出現的是tables fetching,不慌,直接退出重新進入即可。
同時打開items order進行檢查,也添加成功。
案列2
在上面的基礎上,模拟一個第二個語句失敗,同時讓事務退回,第一個語句的更改自動取消。
打開最上面一排按鈕的查詢菜單,然後選擇執行目前語句,它的用處是單句執行目前腳本
就是一行一行執行。
最上方的Local instance,關掉會模拟斷開伺服器的場景,比如網絡崩潰了,客戶崩潰了。
如果關掉再重新進行連接配接,還是可以看到剛加入的訂單,但是加不了新的訂單。
ROLLBACK
用于進行錯誤檢查,手動退回事務。還可以撤銷更改哦
MySQL會自動裝好在事物裡面的每一條語句,語句沒有傳回錯誤,就會送出。
出現關鍵字 DELETE,INSERT, UPDATE的時候,MySQL會先把他們裝在事務裡,然後自動送出。由一個自動送出的系統管控,這樣打開他,預設設定是開,是以一有語句執行,就放到這裡,沒有問題就送出。
完結~