mysql常用的儲存引擎
事務:mysql 事務主要用於處理操作量大,複雜度高的資料。比如說,在人員管理系統中,你刪除乙個人員,你既需要刪除人員的基本資料,也要刪除和該人員相關的資訊,如信箱,文章等等,這樣,這些資料庫操作語句就構成乙個事務! innodb 資料庫引擎的資料庫或表才支援事務。事務用來管理 insert,update,delete 語句。
myisam儲存引擎
由於該儲存引擎不支援事務、也不支援外來鍵,所以訪問速度較快。因此當對事務完整性沒有要求並以訪問為主的應用適合使用該儲存引擎。
innodb儲存引擎(mysql預設儲存引擎)
由於該儲存引擎在事務上具有優勢,即支援具有提交、回滾及崩潰恢復能力等事務特性,所以比myisam儲存引擎占用更多的磁碟空間。
因此當需要頻繁的更新、刪除操作,同時還對事務的完整性要求較高,需要實現併發控制,建議選擇。
一般來說,事務是必須滿足4個條件(acid):原子性(atomicity,或稱不可分割性)、一致性(consistency)、隔離性(isolation,又稱獨立性)、永續性(durability)。
原子性:乙個事務(transaction)是乙個整體,它裡面的所有的操作要麼都做,要麼都不做,是不可再分割的。
一致性: 事務開始前和結束後,資料庫的完整性約束是一致的。在事務開始之前和事務結束以後,資料庫的完整性沒有被破壞。這表示寫入的資料必須完全符合所有的預設規則,這包含資料的精確度、串聯性以及後續資料庫可以自發性地完成預定的工作。(比如a向b轉賬,不可能a扣了錢,b卻沒有收到)
隔離性:資料庫允許多個併發事務同時對其資料進行讀寫和修改的能力,隔離性可以防止多個事務併發執行時由於交叉執行而導致資料的不一致;同一時間,只允許乙個事務請求同一資料,不同的事務之間彼此沒有任何干擾;
永續性:事務處理結束後,對資料的修改就是永久的,即便系統故障也不會丟失。
mysql資料庫為我們提供的四種隔離級別(查自
a、serializable(序列化):可避免髒讀、不可重複讀、幻讀的發生;
b、repeatable read(可重複讀):可避免髒讀、不可重複讀的發生;
c、read committed(讀已提交):可避免髒讀的發生;
d、read uncommitted(讀未提交):最低級別,任何情況都無法保證;
從a----d隔離級別由高到低,級別越高,執行效率越低
innodb支援行級鎖。行級鎖可以最大程度的支援併發,行級鎖是由儲存引擎層實現的。
鎖:鎖的主要作用是管理共享資源的併發訪問,用於實現事務的隔離性
型別:共享鎖(讀鎖)、獨佔鎖(寫鎖)
mysql鎖的力度:表級鎖(開銷小、併發性低),通常在伺服器層實現
行級鎖(開銷大、併發性高),只會在儲存引擎層面進行實現
innodb是為處理巨大資料量的最大效能設計。它的cpu效率可能是任何基於磁碟的關係型資料庫引擎所不能匹敵的
innodb儲存引擎完全與mysql伺服器整合,innodb儲存引擎為在主記憶體中快取資料和索引而維持它自己的緩衝池。innodb將它的表和索引在乙個邏輯表空間中,表空間可以包含數個檔案(或原始磁碟檔案);
innodb支援外來鍵完整性約束,儲存表中的資料時,每張表的儲存都按照主鍵順序存放,如果沒有顯示在表定義時指定主鍵。innodb會為每一行生成乙個6位元組的rowid,並以此作為主鍵
innodb被用在眾多需要高效能的大型資料庫站點上
innodb中不儲存表的行數(eg:select count(*)from table時,innodb需要掃瞄一遍整個表來計算有多少行);清空整個表時,innodb是一行一行的刪除,效率非常慢;
innodb不建立目錄,使用innodb時,mysql將在mysql資料目錄下建立乙個名為ibdata1的10mb大小的自動擴充套件資料檔案,以及兩個名為ib_logfile0和ib_logfile1的5mb大小的日誌檔案
事務的回滾(rollback)
在終端環境,
mariadb [data]> insert into test values(3,30000);query ok, 1 row affected (0.00 sec)
mariadb [data]> insert into test values(4,40000);
query ok, 1 row affected (0.00 sec)
mariadb [data]> select * from test;
+------+----------+
| id | money |
+------+----------+
| 1 | 1234.56 |
| 2 | 23456.88 |
| 3 | 30000.00 |
| 4 | 40000.00 |
+------+----------+
4 rows in set (0.00 sec)
mariadb [data]> select * from test;
+------+----------+
| id | money |
+------+----------+
| 1 | 1234.56 |
| 2 | 23456.88 |
| 3 | 30000.00 |
| 4 | 40000.00 |
+------+----------+
4 rows in set (0.00 sec)
mariadb [data]> rollback;
query ok, 0 rows affected (0.00 sec)
mariadb [data]> select * from test;
+------+----------+
| id | money |
+------+----------+
| 1 | 1234.56 |
| 2 | 23456.88 |
+------+----------+
2 rows in set (0.00 sec)
mariadb [data]>
事務的提交(commit)
mariadb [data]> set autocommit=0; #關閉自動提交,預設是開啟的query ok, 0 rows affected (0.00 sec)
mariadb [data]> insert into haha values(4,40000); #寫入資料
query ok, 1 row affected (0.00 sec)
mariadb [data]> select * from haha; #在終端檢視是已經有新資料了,但需要提交才可以同步
+------+----------+
| id | money |
+------+----------+
| 1 | 1234.56 |
| 2 | 23456.88 |
| 3 | 30000.00 |
| 4 | 40000.00 |
+------+----------+
4 rows in set (0.00 sec)
#開啟新的終端檢視表,看到的是原始資料,
mariadb [data]> select * from haha;
+------+----------+
| id | money |
+------+----------+
| 1 | 1234.56 |
| 2 | 23456.88 |
| 3 | 30000.00 |
+------+----------+
3 rows in set (0.00 sec)
#在之前的終端輸入commit提交,
mariadb [data]> commit;
query ok, 0 rows affected (0.00 sec)
#再次到新的終端檢視,新插入的資料就會顯示,表示寫入成功
mariadb [data]> select * from haha;
+------+----------+
| id | money |
+------+----------+
| 1 | 1234.56 |
| 2 | 23456.88 |
| 3 | 30000.00 |
| 4 | 40000.00 |
+------+----------+
4 rows in set (0.00 sec)
memory
memory儲存引擎儲存資料的位置是記憶體,因此訪問速度最快,但是安全上沒有保障。適合於需要快速的訪問或臨時表。
blackhole
黑洞儲存引擎,可以應用於主備複製中的分發主庫。
mysql儲存引擎 mysql儲存引擎簡介
精品推薦 什麼是儲存引擎 mysql儲存引擎是資料庫如何儲存資料 怎樣建立索引以及如何查詢更新資料等技術的實現方法,資料通過使用不同的技術儲存在檔案中,使用不同的儲存機制 索引方式來提供不同的功能。在mysql這種關係型資料中心來說,資料是以表的方式來儲存的,因此,簡單點來說,儲存引擎就是儲存和操作...
mysql個儲存引擎 MySQL儲存引擎
mysql資料庫的體系架構如下圖所示 從上圖中可以看出,mysql主要分為以下幾個元件 連線池元件 管理服務和工具元件 sql介面元件 分析器元件 優化器元件 緩衝元件 外掛程式式儲存引擎 物理檔案 儲存引擎 其實就是指定表如何儲存資料,如何為儲存的資料建立索引以及如何更新 查詢資料等技術實現的方法...
mysql儲存引擎模式 mysql儲存引擎
mysql資料庫的體系架構如下圖所示 從上圖中可以看出,mysql主要分為以下幾個元件 連線池元件 管理服務和工具元件 sql介面元件 分析器元件 優化器元件 緩衝元件 外掛程式式儲存引擎 物理檔案 一 儲存引擎 儲存引擎 其實就是指定 表 如何儲存資料,如何為儲存的資料 建立索引以及 如何更新,查...