Innodb事務存儲引擎分析

1,什麼是存儲引擎

            存儲引擎說白了就是如何存儲數據,如何爲存儲的數據建立索引和如何更新,查詢數據等技術的實現方法。因爲在關係數據庫中數據的存儲是以表的形式存儲的,所以存儲引擎也可以成爲表類型。

在Oracle和SQL Server等數據庫中只有一個存儲引擎,所有的數據存儲管理機制都是一樣的。MySQL數據庫提供了多種存儲引擎,用戶可以根據不同的需求爲數據庫表選擇不同的存儲引擎,也可以根據自己的需要編寫自己的存儲引擎。


2,如何選擇存儲引擎:

InnoDB存儲引擎:用於事務處理應用程序,具有衆多特性

MyISAM存儲引擎:主要用於管理費事務表,它提供高速存儲和檢索,以及全文搜索能力

...


這邊我們來談談Innodb的事務特性,Innodb是MySQL中少有支持事務的存儲引擎。


3.滿足如下的要求稱之爲事務(transaction):

      ACID:    一致性,持久性,原子性,隔離性

  

1、原子性(atomicity)原子性是指整個數據庫事務是不可分割的工作單位

2、一致性(consistency)一致性指事務將數據庫從一種狀態轉變爲下一種一致的狀態。在事務開始之前和事務結束之後,數據庫的完整性約束沒有被破壞。例如:存入3k,另外扣掉3k

3、隔離性(isolation一個事務的影響在該事務提交之前對其他事務都不可見------這通過鎖來實現

4、持久性(durability)事務一旦提交,其結果就是永久性的


4.MYSQL中autocommit變量值爲ON,則表示自動提交事務,每條sql語句就是一個事務,執行完後自動提交,autocommit爲OFF,則不自動提交,需要手動提交。

MariaDB [linux]> show variables like 'autocommit';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| autocommit    | OFF   |
+---------------+-------+
1 row in set (0.00 sec)

事務是有隔離性的,分爲4個級別:

    

       1 READ-UNCOMMITTED    //事務中修改數據後但尚未提交,另一個事務就能查詢到修改後的結果,可以理解爲實時同步的,但是本事務提交後,另一個事務的查詢的結果又會跟着同步變化了。

        2READ-COMMITTED        //事務中修改數據後但尚未提交,另一個不能查詢修改的數據,只能看到事務前的結果。只有當事務提交了之後,另一個才能看到修改的結果。

        3REPEATABLE-READ        //某一事務中查看到的數據是該事務開始前的數據狀態,再未結束本次事務前,其他事務修改的數據不會被顯示出來。

        4SERIALIZABLE               //只有當一個事務完成才能執行下一個事務或其他事務,其他的事務會被阻塞


MySQL的隔離級別是通過變量tx_isolation實現的:

MariaDB [linux]> show variables like 'tx_isolation';
+---------------+------------------+
| Variable_name | Value            |
+---------------+------------------+
| tx_isolation  | READ-UNCOMMITTED |
+---------------+------------------+
1 row in set (0.00 sec)
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章