存儲引擎概述
作爲可插拔式的組件提供
- MySQL服務軟件自帶的功能程序,處理表的處理器
- 不同的存儲引擎有不同的功能和數據存儲方式
相關
- 查看可用的存儲引擎:
mysql> show engines;
- 查看錶的存儲引擎:(建表時不指定存儲引擎則使用默認引擎)
mysql> show create table 表名; #查看錶的創建命令(包含引擎信息)
- 修改默認儲存引擎:
] vim /etc/my.cnf
default-storage-engine="引擎名"
- 建表時指定存儲引擎:
mysql> create table 表(字段...)engine="引擎名";
- 修改表的存儲引擎:
mysql> alter table 表名 engine=引擎名;
存儲引擎
工作中常用存儲引擎:innodb/myisam
讀操作多
的表適合使用MyISAM:節省系統硬件資源寫操作多
的表適合使用innodb:併發訪問量大
存儲引擎特點
-
MyISAM
- 表文件:
- .frm 表結構
- .MYI 索引
- .MYD 表數據
- 主要特點:
- 支持表級鎖
- 不支持事務、事務回滾、外鍵
-
InnoDB
- 表文件:
- .frm 表結構
- .ibd 表空間(表索引+表記錄)
- 主要特點:
- 支持行級鎖
- 支持事務、回滾、外鍵
- 事務日誌文件:
- ibdata1
- ib_logfile0
- ib_logfile1
鎖表:對錶執行命令時,鎖定表或行,命令執行期間限制
其他用戶對鎖定的數據進行操作
鎖級別 | 說明 |
---|---|
表級鎖 | 訪問時整張表鎖表 |
行級鎖 | 訪問時只鎖定被訪問的行,其餘未加鎖的行可以被訪問 |
鎖類型 | 觸發鎖的SQL命令 |
---|---|
讀鎖(共享鎖) | select |
寫鎖(排他鎖/互斥鎖) | insert/update/delete |
- 共享鎖:一個select期間,
可以同時
再次select,不可以update/delete/insert - 排他鎖/互斥鎖:一個update/delete/insert期間,不可以執行select,也不可以update/delete/insert
mysql> show status like 'table_lock%'; #查看當前鎖狀態
事務特性:(ACID)
- Atomic:原子性
事務的整個操作是一個整體,不可分割,要麼全部成功,要麼全部失敗 - Consistemcy:一致性
事務操作的前後,表中的記錄沒有變化 - Isolation:隔離性
事務操作時相互隔離不受影響的 - Durability:持久性
數據一旦提交,不可改變,永久改變表數據
mysql> show variables like 'autocommit'; #查看提交狀態
mysql> set autocommit=off; #關閉自動提交(僅當前有效)
mysql> rollback; #數據回滾
mysql> commit; #提交數據