MySQL存儲引擎
一、MySQL存儲引擎
1.1、存儲引擎概述
數據庫存儲引擎是數據庫底層軟件組織,數據庫管理系統(DBMS)使用數據引擎進行創建、查詢、更新、刪除數據。不同的存儲引擎提供不同的存儲機制、索引技巧、鎖定水平等功能,使用不同的存儲引擎,還可以獲得特定的功能。
因爲在關係行數據庫中數據的存儲是以表的形式存儲的,所以存儲引擎也成爲表類型,也就是存儲和操作此表的類型。
1.2、MySQL體系結構
- 由8個組件組成
序號 | 結構名稱 | 說明 | |
---|---|---|---|
1 | Management Service & Utilities | 管理工具 | 軟件安裝後提供的命令 |
2 | Connection Pool | 連接池 | 驗證客戶端連接及系統資源 |
3 | SQL Interface | SQL接口 | 接收用戶的SQL命令,並且返回用戶需要查詢的結構 |
4 | Parser | 分析器 | 接收到的的sql命令是否有語法錯誤及是否有訪問權限 |
5 | Optimizer | 優化器 | 優化執行的sql命令,比如在查詢的過程中,篩選條件,達到更節省資源的目的 |
6 | Cache & Buffer | 查詢緩存 | 存儲客戶端曾經查詢過的數據,重複被讀取的數據可以在緩存中讀取。 |
7 | Engine | 存儲引擎 | MySQL服務軟件自帶的功能程序 |
8 | File System | 文件系統 | 存儲介質 (硬盤 iscsi ceph lvm) |
不同的存儲引擎有不同的功能和數據存儲方式
處理表的處理器(存儲引擎決定對錶的數據做訪問時,數據服務如何處理客戶端的訪問。)|
1.3、MySQL服務的工作過程
二、存儲引擎的管理
2.1、查看存儲引擎
2.1.1、查看數據庫服務使用的存儲引擎
mysql> show engines;
+--------------------+---------+----------------------------------------------------------------+--------------+------+------------+
| Engine | Support | Comment | Transactions | XA | Savepoints |
+--------------------+---------+----------------------------------------------------------------+--------------+------+------------+
| InnoDB | DEFAULT | Supports transactions, row-level locking, and foreign keys | YES | YES | YES |
| MRG_MYISAM | YES | Collection of identical MyISAM tables | NO | NO | NO |
| MEMORY | YES | Hash based, stored in memory, useful for temporary tables | NO | NO | NO |
| BLACKHOLE | YES | /dev/null storage engine (anything you write to it disappears) | NO | NO | NO |
| MyISAM | YES | MyISAM storage engine | NO | NO | NO |
| CSV | YES | CSV storage engine | NO | NO | NO |
| ARCHIVE | YES | Archive storage engine | NO | NO | NO |
| PERFORMANCE_SCHEMA | YES | Performance Schema | NO | NO | NO |
| FEDERATED | NO | Federated MySQL storage engine | NULL | NULL | NULL |
+--------------------+---------+----------------------------------------------------------------+--------------+------+------------+
9 rows in set (0.00 sec)
帶有DEFAULT字樣的是默認存儲引擎
2.1.2、查看當前表使用的存儲引擎
mysql> show create table 庫名.表名 \G
2.2、創建表時指定存儲引擎
- 命令格式
create table 庫名.表名(字段 字符類型(10))engine=存儲引擎名稱;
mysql> create database mydb1;
Query OK, 1 row affected (0.35 sec)
mysql> create table mydb1.user1(class char(10))engine=memory;
Query OK, 0 rows affected (0.00 sec)
2.3、修改表存儲引擎
- 命令格式
alter table 庫名.表名 engine=存儲引擎名稱;
mysql> alter table mydb1.user1 engine=myisam;
2.4、修改數據庫服務使用的存儲引擎
[root@client ~]# vim /etc/my.cnf
[mysqld]
default-storage-engine="myisam"
:wq
[root@client ~]# systemctl restart mysqld
三、常用引擎介紹
3.1、myisam存儲引擎
- 主要特點
- 支持表級鎖
- 不支持事務、事務回滾、外鍵
- 表文件
表名.frm——表結構
表名.MYI——索引
表名.MYD——數據
3.2、innodb存儲引擎
- 主要特點
- 支持行級鎖定
- 支持事務、事務回滾、外鍵
- 表文件
表名.frm——表結構
表名.ibd——表索引+表數據 - 事務日誌文件
ibdata1
ib_logfile0
ib_logfile1
3.3、MySQL鎖機制
- 鎖粒度
- 表級鎖:對整張表加鎖
- 行級鎖:僅對被訪問的行分別加鎖
- 鎖類型
- 讀鎖(共享鎖)(select):支持併發讀
- 寫鎖(互斥鎖、排他鎖)(insert update delete):是獨佔鎖,上鎖期間其它線程不能讀表或寫表
- 查看當前鎖狀態
- show status like “table_lock%”;
3.4、事務特性(ACID)
- 相關概念
- 事務:連接數據庫服務後,操作數據,斷開連接,這個過程被稱爲事務。
- 事務回滾:操作數據錯誤時,可以恢復正確的狀態。
- Atomic:原子性
- 事務的整個操作是一個整體,不可分割,要麼全部成功,要麼全部失敗。
- Consistency:一致性
- 事務操作的前後,表中的記錄沒有變化
- Isolation:隔離性
- 事務操作時相互隔離不受影響的
- Durability:持久性
- 數據一旦提交,不可改變,永久改變表數據
- 相關命令
show variables like "autocommit"; //查看提交狀態
set autocommit=off; //關閉自動提交
rollback; //數據回滾
commit; //提交數據