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)