mysql事务和非事物_mysql事务型与非事务型表1.8.5.3. 事务和原子操作
1.8.5.3.?事務和原子操作
MySQL服務器(3.23至該系列的最高版本,所有4.0版本,以及更高版本)支持采用InnoDB和BDB事務存儲引擎的事務。InnoDB提供了全面的ACID兼容性。請參見第15章:存儲引擎和表類型。
MySQL服務器中的其他非事務性存儲引擎(如MyISAM)遵從不同的數據完整性范例,稱之為“原子操作”。按照事務術語,MyISAM表總能高效地工作在AUTOCOMMIT=1模式下。原子操作通常能提供可比較的完整性以及更好的性能。
由于MySQL服務器支持兩種范例,因而你能決定是否利用原子操作的速度更好地服務于你的應用程序,或使用事務特性。該選擇可按表進行。
正如所闡述的那樣,事務性和非事務性表類型之間的權衡主要取決于性能。事務性表對內存和磁盤空間的要求更高,CPU開銷也更大。另一方面,多種事務性表類型,如InnoDB,也能提供很多顯著特性。MySQL服務器的模塊化設計允許同時使用不同的存儲引擎,以滿足不同的要求,并在所有情形下,提供最佳性能。
但是,即便使用非事務性MyISAM表,你將如何使用MySQL服務器的特性來保持嚴格的完整性呢?這些特性與事務性表類型相比又如何呢?
1.
如果應用程序采用了特定的編寫方式,依賴于在關鍵情況下能夠調用ROLLBACK而不是COMMIT,那么事務性類型更方便。使用事務,還能確保未完成的更新或崩潰的活動不被提交到數據庫,能為服務器提供自動回滾的機會,并保存你的數據庫。
如果使用非事務性表,MySQL服務器幾乎在所有情況下均允許你解決潛在的問題,方式是在更新前進行簡單檢查,并運行檢查數據庫一致性的簡單腳本,如果出現不一致性,該腳本能自動修復它或給出告警。注意,僅使用MySQL日志或增加額外日志,通常能完美地更正表,同時不會造成數據完整性損失。
2.
在很多情況下,能夠對關鍵的事務更新進行重寫,使之成為“原子”類型。一般而言,所有由事務解決的完整性問題均能用LOCK
TABLES或原子更新解決,從而確保了服務器不會自動中斷,后者是事務性數據庫系統的常見問題。
3.
為了安全使用MySQL服務器,無論是否使用事務性表,僅需啟用備份和二進制日志功能。這樣,你就能解決使用其他事務性數據庫系統時遇到的任何問題。無論使用的數據庫系統是什么,啟用備份總是個好主意。
在完整性具有最高重要性的情況下,即使是對非事務性表,MySQL也能提供事務級別的可靠性和安全性。如果使用LOCK
TABLES鎖定了表,所有更新均將被暫時中止直至完整性檢查完成。如果你獲得了對某一表的READ
LOCAL鎖定(與寫鎖定相對),該表允許在表尾執行并行插入,當其他客戶端執行插入操作時,允許執行讀操作。新插入的記錄不會被有讀鎖定屬性的客戶端看到,直至解除了該鎖定為止。使用INSERT
DELAYED,能夠將插入項置于本地隊列中,直至鎖定解除,不會讓客戶端等待插入完成
事務范型有自己的優點和不足之處。很多用戶和應用程序開發人員喜歡這類簡單性,在出現問題時或必要時,通過代碼解決問題。但是,即使你是原子操作范型的新手,或更熟悉事務,也請考慮非事務性表的速度益處,與經過優化調整的最快的事務性表相比,它的速度快3~5倍。
總結
以上是生活随笔為你收集整理的mysql事务和非事物_mysql事务型与非事务型表1.8.5.3. 事务和原子操作的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: xib 设置阴影_使用“IBInspec
- 下一篇: 易企秀如何生成图片_易企秀可以导出图片吗