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;			//提交數據
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章