MySQL_09存储引擎
MySQL_09存储引擎
1.什么是存储引擎,有什么用?
存储引擎是MySQL中特有的一个术语,其它数据库里没有。(oracle里有,不叫此名)
实际上存储是一个表存储/组织数据的方式。
不同的存储引擎,表存储数据的方式不同。
2.怎么给表添加/指定存储引擎?
查看一张表的组成结构:
show create table 表名;
比如查看t_student这张表:
| t_student | CREATE TABLE `t_student` (
`no` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(255) DEFAULT NULL,
`cno` int(11) DEFAULT NULL,
PRIMARY KEY (`no`),
KEY `cno` (`cno`),
CONSTRAINT `t_student_ibfk_1` FOREIGN KEY (`cno`) REFERENCES `t_class` (`classno`)
) ENGINE=InnoDB AUTO_INCREMENT=9 DEFAULT CHARSET=utf8 |
在建表时,可以在最后小括号的后面使用:
- ENGINE来指定存储引擎。
- CHARSET来指定这张表的字符编码格式。
结论:
- mysql默认的存储引擎是:InnoDB
- mysql默认的字符编码格式是:utf8
现在我们来建一个表,在建表时指定存储引擎及字符编码格式:
create table t_test(
id int primary key,
name varchar(255)
) engine = InnoDB default charset = gbk;
查看表:
| t_test | CREATE TABLE `t_test` (
`id` int(11) NOT NULL,
`name` varchar(255) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=gbk |
3.MySQL支持的存储引擎
我的mysql版本是:
mysql> select version();
+-----------+
| version() |
+-----------+
| 5.5.62 |
+-----------+
查看mysql支持的存储引擎:show engines \G;
mysql> show engines \G;
*************************** 1. row ***************************
Engine: FEDERATED
Support: NO
Comment: Federated MySQL storage engine
Transactions: NULL
XA: NULL
Savepoints: NULL
*************************** 2. row ***************************
Engine: MRG_MYISAM
Support: YES
Comment: Collection of identical MyISAM tables
Transactions: NO
XA: NO
Savepoints: NO
*************************** 3. row ***************************
Engine: MyISAM
Support: YES
Comment: MyISAM storage engine
Transactions: NO
XA: NO
Savepoints: NO
*************************** 4. row ***************************
Engine: BLACKHOLE
Support: YES
Comment: /dev/null storage engine (anything you write to it disappears)
Transactions: NO
XA: NO
Savepoints: NO
*************************** 5. row ***************************
Engine: CSV
Support: YES
Comment: CSV storage engine
Transactions: NO
XA: NO
Savepoints: NO
*************************** 6. row ***************************
Engine: MEMORY
Support: YES
Comment: Hash based, stored in memory, useful for temporary tables
Transactions: NO
XA: NO
Savepoints: NO
*************************** 7. row ***************************
Engine: ARCHIVE
Support: YES
Comment: Archive storage engine
Transactions: NO
XA: NO
Savepoints: NO
*************************** 8. row ***************************
Engine: InnoDB
Support: DEFAULT
Comment: Supports transactions, row-level locking, and foreign keys
Transactions: YES
XA: YES
Savepoints: YES
*************************** 9. row ***************************
Engine: PERFORMANCE_SCHEMA
Support: YES
Comment: Performance Schema
Transactions: NO
XA: NO
Savepoints: NO
mysql支持九大存储引擎,我的版本5.5.62支持8个,版本不同支持情况也不同。
4.MySQL常用的存储引擎
MySQL常用的存储引擎有:
- myISAM
- InnoDB
- MEMORY
5.MyISAM存储引擎
- MyISAM引擎是mySQL最常用的引擎
- 它管理的表有以下特征:
- 使用三个文件表示每个表
- 格式文件:存储表结构的定义(mytable.frm)
- 数据文件:存储表行的内容(mytable.MYD)
- 索引文件:存储表上的索引(mytable.MYI),索引相当于是一本书的目录,缩小扫描范围,提高检索效率的一种机制。
- 灵活的AUTO_INCREMENT字段处理
- 可被转换为压缩、只读表来节省空间
- 使用三个文件表示每个表
- MyISAM不支持事务机制,安全性低。
提示:对于一张表来说,只要是主键,或者加有unique约束的字段上会自动创建索引。
6.InnoDB存储引擎
- 这是mysql默认的存储引擎,同时也会死一个重量级的存储引擎。
- InnoDB支持事务,支持数据库崩溃后的自动恢复机制。
- InnoDB存储引擎最主要的特点是:非常安全。
- 它管理的表具有以下主要特征:
- 每个InnoDB表在数据库目录中以.frm格式文件表示
- InnoDB表空间tablespace被用于存储表的内容(表空间是一个逻辑名称,表空间存储数据+索引)
- 提供一组用来记录事务性活动的日志文件
- 用COMMIT(提交)、SAVEPOINT以及ROWBACK(回滚)支持事务处理
- 提供ACID兼容
- 在MySQL服务器崩溃后提供自动恢复
- 多版本(MVCC)和行级锁定
- 支持外键及引用的完整性,包括级联删除和更新
- InnoDB最大的特点就是支持事务:
- 保证数据安全
- 效率不是很高
- 不能压缩,不能转换为只读,不能很好的节省存储空间
7.MEMORY存储引擎
- 使用MEMORY存储引擎的表,其数据存储在内存中,行的长度固定,这两点使得MEMORY存储引擎非常快。
- MEMORY存储引擎管理的表具有以下特征:
- 在数据库目录内,每个表均以.frm格式的文件表示。
- 表数据及索引被存储在内存中。(目的就是快,查询速度快)
- 表级锁机制
- 不能包含TEXT或BLOB字段
- MEMORY存储引擎以前被称为HEAP引擎
- MEMORY存储引擎优点:查询效率是最高的,不需要和硬盘交互。
- MEMORY存储引擎缺点:不安全,关机后数据消失。因为数据和索引都是在内存中。