1. 程式人生 > >Mysql事務介紹

Mysql事務介紹

一、什麼是事務:

• 事務是應用程式中一系列嚴密的操作,所有操作必須成功完成,否則在每個操作中所作的所有更改都會被撤消。也就是事務具有原子性,一個事務中的一系列的操作要麼全部成功,要麼一個都不做。
• 事務的結束有兩種,當事務中的所有步驟全部成功執行時,事務提交。如果其中一個步驟失敗,將發生回滾操作,撤消事務開始時的所有操作。

二、事務ACID 事務具有四個特徵:原子性( Atomicity )、一致性( Consistency )、隔離性( Isolation )和持續性( Durability )。這四個特性簡稱為 ACID 特性。 1. 原子性。要麼都做,要麼都不做。與原子操作不同,原子操作是不能打斷的,而原子性是可以插入其他操作的。 2. 一致性。要麼成功,要麼回滾。 事務執行的結果必須是使資料庫從一個一致性狀態變到另一個一致性狀態。 因此當資料庫只包含成功事務提交的結果時,就說資料庫處於一致性狀態。如果資料庫系統執行中發生故障,有些事務尚未完成就被迫中斷,這些未完成事務對資料庫所做的修改有一部分已寫入物理資料庫,這時資料庫就處於一種不正確的狀態,或者說是不一致的狀態。 3. 隔離性。一個事務的執行不能被其它事務干擾。即一個事務內部的操作及使用的資料對其它併發事務是隔離的,併發執行的各個事務之間不能互相干擾。 4. 持續性。也稱永久性,指一個事務一旦提交,它對資料庫中的資料的改變就應該是永久性的。接下來的其它操作或故障不應該對其執行結果有任何影響。 三、隔離級別以及是否加鎖 1. Read Uncommitted 讀取未提交的內容,由於會存在髒讀,不可重複讀以及幻讀,所以基本不會用該隔離級別。該級別對任何操作都沒有加鎖。 2. Read committed 讀取提交的內容 oracle 預設的事務隔離級別 該級別對讀不加鎖,對寫是加鎖的,所以會出現不可重複讀以及幻讀。不可重複讀是因為在兩次讀取資料中間可能會有其他事務新增或者修改資料。 3. Repeatable Read 可重讀 mysql預設的事務隔離級別,對讀和寫都會加鎖,但是無法避免幻讀,因為讀加鎖,只是鎖讀的資料,不會鎖表,無法阻止其他事務新增資料 4. Serializable 序列化 強制事務排序,事物之間不可能產生衝突 四、樂觀鎖與悲觀鎖 悲觀鎖:讀寫加鎖,上面的可重讀實現方式,這樣會佔用大量的開銷,減少併發量 樂觀鎖:使用資料版本MVCC,讀資料會讀取資料的版本,更新資料時會對版本加一。提交時,如果資料版本與當前版本不一致,會認為是過期資料。