1. 程式人生 > >mysql資料庫——事務

mysql資料庫——事務

為什麼會有事務:為了保證流程的完整執行。

事務是一組不可被分割的SQL語句的集合,是一組連續的資料庫操作,
作為一個單一的工作單元來執行。這一組操作要麼全部成功執行,要麼全部回滾

最經典的就是銀行轉賬,一個轉出,一個收到。


mysql 事務主要用於處理操作量大,複雜度高的資料,
事物處理可以用來維護資料庫的完整性,保證成批的sql 語句要麼全部執行,要麼全部不執行,
事物是用來 管理insert,update,delete語句的。

事務的四個特性

1,原子性
    一個事物中的所有操作,要麼全部成功,要麼全部失敗

2.一致性
    在事務開始之前和結束之後,資料庫的完整性沒有被破壞,就是說寫入
    的資料必須完全符合所有的預設規則,

3.隔離性
    資料庫允許多個併發事務同時對其資料進行讀寫和修改,

4.永續性
    事務處理的結束後,對資料的修改就是永久的,即便系統故障也不會丟失資料。

事務的簡單應用

begin ; 
insert  into  emp values(1,'aaa', 3000);
insert  into  emp values(2,'bbb', 4000);
commit ;


開始以  begin 開始,結束以commit  /  rollback 結束
commit 是提交事務,rollback 是回滾事務。

savepoint     // 回滾點,儲存點。
配合 rollback to一起使用,
savepoint   p1;



rollback  to  p1;

 

事務的隔離

資料庫事務併發時,經常會出現一些問題,會導致:
髒讀,不可重複讀,幻影讀

1.髒讀:
    一個事務讀取了 同時併發的另一個事務沒提交的資料。

2.不可重複讀:
    一個事務重複讀取之前讀取過的資料,後發現讀取的資料被另一個
    事務所修改。

3.幻讀:
    一個事務重複的讀取資料,在獲得的資料行中,發現有些資料是其他事務最近操作的資料


處理隔離級別:

read  uncommited      //都允許
read  commited             //不允許髒讀
repeatable  read        // 只允許幻讀        資料庫預設
serializable  read        // 都不允許