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 // 都不允許