mysq引擎MyISAM和InnoDB在事務上的區別

mysq引擎MyISAM和InnoDB在事務上的區別

好吧本來以爲理解了,現在還是再來回顧一下

MyISAM和InnoDB主要區別

1.InnoDB支持事務,MyISAM不支持,對於InnoDB每一條SQL語言都默認封裝成事務,自動提交,這樣會影響速度,所以最好把多條SQL語言放在begin和commit之間,組成一個事務;

2.InnoDB支持表、行(默認)級鎖,而MyISAM支持表級鎖

3.InnoDB表必須有主鍵(用戶沒有指定的話會自己找或生產一個主鍵),而Myisam可以沒有

MyISAM強調的是性能,每次查詢具有原子性,其執行速度比InnoDB類型更快,但是它不提供事務支持。但是InnoDB 提供事務支持事務,外部鍵等高級數據庫功能。 具有事務(commit)、回滾(rollback)和崩潰修復能力(crash recovery capabilities)的事務安全(transaction-safe (ACID compliant))型表。

爲什麼MYISAM不支持事務

首先理解MyIASM是非事務安全的,而InnoDB是事務安全的

事務:事務(Transaction)是訪問並且可能更新數據庫中各種數據項的一個程序執行單元(unit)。事務通常由高級數據庫操縱語言或者編程語言書寫的用戶程序的執行所引起。事務由“事務開始”和“事務結束”之間的全體操作組成。

事務因具有4個屬性:原子性(atomicity)、一致性(consistency)、隔離性(isolation)、持久性/永久性(durability / permanence)。

  • 爲什麼要有事務?

爲了確保邏輯的成功。 例子: 銀行的轉賬。

那到底MYISAM不支持事務是什麼意思???

mysql的myisam存儲類型不支持事務是指當出現異常時,異常後數據庫的數據更新還是成功了,事務不會回滾,這就是myisam的特性。

 

那怎麼解決呢,,,

MYISAM支持表鎖,加上表鎖後,出現異常後,那麼當前語句就不執行。

 

那什麼是表鎖???

MySQL鎖大體分三種:

  1. 表鎖:開銷小,加鎖快;不會出現死鎖;鎖粒度大,發生鎖衝突機率高,併發度最低
  2. 行鎖:開銷大,加鎖慢;會出現死鎖;鎖粒度小,發生鎖衝突機率小,併發度最高
  3. 頁鎖:開銷和加鎖時間介於表鎖和行鎖之間;會出現死鎖,鎖粒度介於表鎖和行鎖之間

僅從鎖的角度來講,表鎖使用於以查詢爲主,只有少量按索引條件更新數據的應用,如WEB應用;而行級鎖更適合於有大量按索引條件併發更新少量不同數據,同時又有併發查詢的應用,如一些在線事務處理(OLTP)系統。

表鎖有共享讀鎖和獨佔寫鎖兩種模式。讀鎖與讀鎖是兼容的,讀鎖與寫鎖是互斥的,寫鎖與寫鎖是互斥的。

 

MYISAM的區別

https://blog.csdn.net/weixin_46108954/article/details/105311420

 

事務的概念

https://www.cnblogs.com/lixiaochi/p/10591205.html

 

MYISAM的表鎖

https://www.iteye.com/blog/lixiaohui-2352449

https://dev.mysql.com/doc/refman/5.7/en/lock-tables.html

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章