1. 程式人生 > >mysql 事務、隔離機制、儲存引擎

mysql 事務、隔離機制、儲存引擎

1、mysql事務的四大特性:

   1:原子性:由於事務的操作是原子級別的,所以在整個事務中對資料庫的操作要麼同時完成,要麼同時失敗;失敗之後就會回滾到事務操作之前的狀態。

   2:一致性:事務操作前後,資料庫的完整性約束不變。舉個例子,A給B轉賬100塊錢,事務操作前,a+b=c,事務操作後,(a-100)+(b+100)=c,事務操作前後,a,b加起來的錢數不變

   3:隔離性:事務和事務之前是相互隔離,互不干擾的

   4:永續性:事務一旦操作成功,事務對資料的修改就會永久的儲存在資料庫中。

 

2、mysql的事務隔離機制

   1:讀未提交資料:容易產生髒資料,安全等級最低。舉個例子,在A事務下,a為10,我修改成100,還未來得及提交,在B事務下,查詢到的a就是100;

   2:不可重複讀:解決了髒讀,但是不能重複讀取;舉個例子,在A事務下,a為10,我修改成100,不提交。在B事務中讀取的還是10,但是當A事務提交後,B事務再讀取,a還是為10;

   3:可重複讀:解決了髒讀,結局了不可重複讀,但是會產生幻讀;幻讀是使用者讀取到某一範圍資料時,另一事物又在該範圍內插入了新行,當用戶再次讀取該範圍的資料行時,就會產生幻讀;舉個例子:A檢視自己工資卡上的消費記錄,查詢到當月的消費總額(select sum(account) from table where month = '本月')為80元,這時B在外面用A的工資卡消費了300元,再次查詢當月的消費總額(select sum(account)from table where month='本月')為380元,因為在table表中month='本月'的條件下,就新增了一條消費300元的記錄;mysql中預設的隔離機制是可重複讀,它自帶的有mvvc多版本併發控制機制用來解決幻讀問題.

  4:序列化:安全等級最高,能解決一切問題,是Oracle資料庫預設的隔離機制。具體操作是:他會序列化同步,讓事務進入到一個佇列中,一個一個的執行不能併發執行,所以效率會很低。

 

3、mysql的儲存引擎

  1:ISAM引擎在設計的時候就考慮到了資料庫被查詢的次數要遠遠大於修改次數,所以ISAM的查詢速率非常快,而且不佔用大量的記憶體和資源;但是ISAM不支援事務處理,也不能容錯。如果你的硬碟崩潰了,那麼資料檔案就無法恢復。處理辦法就是經常備份你所有的實時資料,通過其複製特性來備份資料庫。

2:MyISAM引擎是ISAM引擎的擴充套件,在其基礎上提供了ISAM引擎沒有的索引和欄位管理功能,MyISAM還是用一種表格鎖定機制來優化多個併發的讀寫操作,但是會浪費空間,需要經常經常執行optimize table命令來恢復空間。

3:memory引擎允許只駐留在記憶體裡的臨時表格,所以速度比ISAM和MyISAM都快,但是管理的資料極其不穩地,如果在關機之前沒有進行儲存,所有的資料都會丟失。在刪除資料的時候,memory引擎不會浪費大量的空間。

4::InnoDB引擎支援事務處理和外來鍵,容災性比較好,所以速度會比ISAM、MyISAM慢;事務控制是通過多版本併發控制實現的。mysql預設的儲存引擎是InnoDB。

InnoDB和MyISAM的區別:

   1::InnoDB不支援全文索引

   2::InnoDB不儲存表的具體行數(例子:執行select count(*) from table是,InnoDB會掃描整個表來計算行數,而MyISAM可以直接獲取行數)

   3:InnoDB支援事務和外來鍵,MyISAM強調的是效能,不支援事務和外來鍵但執行速度比InnoDB快。