mysql-210713-02—存储引擎
存储引擎 什么是存储引擎 查看当前MySQL支持的存储引擎 查看创建表结构 MyISAM存储引擎 InnoDB存储引擎 MEMORY存储引擎 选择合适的存储引擎
存储引擎
存储引擎是什么
存储引擎这个名字只在MySQL中存在。
Oracle中有对应的机制,但是不叫做存储引擎,
Oracle中没有特殊名字,就是 “ 表的存储方式 ”
MySQL支持很多存储引擎,每一个存储引擎都对应了一种不同的存储方式。
每一个存储引擎都有它自己的优缺点。
查看当前MySQL支持的存储引擎类型
mysql> select version();
+-----------+
| version() |
+-----------+
| 8.0.22 |
+-----------+
1 row in set (0.00 sec)
// 查看当前MySQL支持的存储引擎
show engines \G;
查看创建表结构
mysql> show create table emp;
+-------+--------------------------------------------+
| Table | Create Table |
+-------+--------------------------------------------+
| emp | CREATE TABLE `emp` (
`EMPNO` int NOT NULL,
`ENAME` varchar(10) DEFAULT NULL,
`JOB` varchar(9) DEFAULT NULL,
`MGR` int DEFAULT NULL,
`HIREDATE` date DEFAULT NULL,
`SAL` double(7,2) DEFAULT NULL,
`COMM` double(7,2) DEFAULT NULL,
`DEPTNO` int DEFAULT NULL,
PRIMARY KEY (`EMPNO`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 |
+-------+-------------------------------------------+
1 row in set (0.00 sec)
ENGINE=InnoDB DEFAULT CHARSET=utf8
采用InnoDB引擎的方式,默认编码为utf8
// 完整建表语句
// mysql默认使用存储引擎是InnoDB方式
create table `t_test`(
`no` int(11) default null
) engine=InnoDB default charset=utf8;
在MySQL中,
凡是标识符,都可以用飘号(`)(数字1左边,Esc下面)括起来,
但是最好不要用,因为它不通用。
MyISAM存储引擎
*************************** 6. row ***************************
Engine: MyISAM
Support: YES
Comment: MyISAM storage engine
Transactions: NO
XA: NO
Savepoints: NO
MyISAM存储引擎不支持事务,
MyISAM存储引擎是最常用的引擎,
它管理的表具有以下特征:
使用三个文件组织一张表:
格式文件 — 存储表结构的定义(***.frm)
数据文件 — 存储表行的内容(***.MYD)
索引文件 — 存储表上索引(***.MYI)
优点:
灵活的AUTO_INCREMENT字段处理,
可被压缩,节省内存空间,
可以转换为只读表,来提高检索效率。
缺点:
不支持事务。
InnoDB存储引擎
*************************** 7. row ***************************
Engine: InnoDB
Support: DEFAULT
Comment: Supports transactions, row-level locking, and foreign keys
Transactions: YES
XA: YES
Savepoints: YES
MySQL默认存储引擎
优点:
支持事务,行级锁,外键等
这种存储引擎 ,数据得到保障。
表的结构存储在***.frm文件中
数据存储在tablespace这样的表空间中(逻辑概念),
无法被压缩,无法转换成只读,
InnoDB存储引擎在MySQL数据库崩溃之后提供自动恢复机制,
InnoDB存储引擎支持级联删除,和级联更新。
它管理的表具有下列主要特征:
每个InnoDB表在数据库目录中以.frm格式文件表示
InnoDB表空间tablespace被用于存储表的内容
提供一组用来记录事务性活动的日志文件
用COMMIT(提交)、SAVEPOINT及ROLLBACK(回滚)支持事务处理
提供全ACID兼容
在MySQL服务器崩溃后提供自动恢复
多版本(MVCC)和行级锁定
支持外键及引用的完整性,包括级联删除和更新
MEMORY存储引擎
*************************** 1. row ***************************
Engine: MEMORY
Support: YES
Comment: Hash based, stored in memory, useful for temporary tables
Transactions: NO
XA: NO
Savepoints: NO
缺点:
不支持事务,
数据容易丢失,因为说有数据和索引都是存储在内存当中。
优点:
查询速度最快。
以前叫做HEPA引擎
使用MEMORY存储引擎的表,其数据存储在内存中,且行的长度固定,这两个特点使得MEMORY存储引擎非常快。
MEMORY存储引擎管理的表具有下列特征:
在数据库目录内,每个表均以.frm格式的文件表示。
表数据及索引被存储在内存中。
表级锁机制。
不能包含TEXT或BLOB字段。
MEMORY存储引擎以前被称为HEAP引擎。
选择合适的存储引擎
MyISAM表最适合于大量的数据读而少量数据更新的混合操作。MyISAM表的另一种适用情形是使用压缩的只读表。
如果查询中包含较多的数据更新操作,应使用InnoDB。其行级锁机制和多版本的支持为数据读取和更新的混合操作提供了良好的并发机制。
可使用MEMORY存储引擎来存储非永久需要的数据,或者是能够从基于磁盘的表中重新生成的数据。