目录
一、存储引擎概述
1.存储引擎概念
2.存储引擎分类
3.选择存储引擎的原则
二、InnoDB 存储引擎
三、MyISAM 存储引擎
四、实验操作
一、存储引擎概述
1.存储引擎概念
数据库存储引擎是数据库底层软件组件,数据库管理系统使用数据库引擎进行创建,查询,更新和删除数据。不同存储引擎提供不同存储机制,搜索技巧,锁定水平。MySQL核心是存储引擎。
MySQL中,可以利用show engines 显示数据库引擎。可以在每一个表使用不同的存储引擎。
MySQL 5.7 支持的存储引擎有 InnoDB、MyISAM、Memory、Merge、Archive、Federated、CSV、BLACKHOLE。
2.存储引擎分类
innodb: 64T 、支持事务、B树索引、数据缓存、支持外键
myisam:256T、支持全文索引、B树索引、
memory:内存、B树索引、hash索引
功能 | MylSAM | MEMORY | InnoDB | Archive |
存储限制 | 256TB | RAM | 64TB | None |
支持事务 | No | No | Yes | No |
支持全文索引 | Yes | No | No | No |
支持树索引 | Yes | Yes | Yes | No |
支持哈希索引 | No | Yes | No | No |
支持数据缓存 | No | N/A | Yes | No |
支持外键 | No | No | Yes | No |
备注:
Innodb:事务型数据库的首选引擎,支持事务安全表(ACID),支持锁定和外键,InnoDB是默认存储引擎。
MyISAM:基于ISAM存储引擎,进行扩展,在Web、数据仓储最常用的存储引擎。MyISAM拥有较高插入,查询速度,但是不支持事务。
MeMORY:将存储数据存储到内存中,进行快速查询和引用。
3.选择存储引擎的原则
提供提交、回滚和恢复的事务安全表能力,选择InnoDB。
用来插入和查询记录,MyISAM提供较高的处理效率。
存储临时数且数据量不大,不需要较高的安全性,选择MeMORY。
二、InnoDB 存储引擎
用 InnoDB 存储引擎是最理想的选择:
(1)更新密集的表:InnoDB 存储引擎特别适合处理多重并发的更新请求。
(2)事务:InnoDB 存储引擎是支持事务的标准 MySQL 存储引擎。
(3)自动灾难恢复:与其它存储引擎不同,InnoDB 表能够自动从灾难中恢复。
(4)外键约束:MySQL 支持外键的存储引擎只有 InnoDB。
(5)支持自动增加列 AUTO_INCREMENT 属性。
Innodb的数据文件:
ibd:数据表的数据文件
frm:数据表的元数据
opt:存储的是mysql的一些配置信息,如编码、排序的信息等
三、MyISAM 存储引擎
每个 MyISAM 表在磁盘上存储成 3 个文件,其中文件名和表名都相同,但是扩展名分别为:
(1)frm(存储表定义)
(2)MYD(MYData,存储数据)
(3)MYI(MYIndex,存储索引)
MyISAM 表还支持 3 种不同的存储格式:
(1)静态(固定长度)表
(2)动态表
(3)压缩表
四、实验操作
修改默认的存储引擎
(1)创建表,并查看默认用的存储引擎
mysql> create database auth;
mysql> use auth
mysql> CREATE TABLE t1 (user_name CHAR(16), user_passwd CHAR(48));
mysql> show table status from auth where name='t1'\G
(2)通过 alter table 修改
mysql> alter table t1 engine=MyISAM;
mysql> show table status from auth where name='t1'\G
(3)通过配置文件修改
[root@localhost ~]# vim /etc/my.cnf
[mysqld]
#添加下面语句
default-storage-engine=MyISAM
[root@localhost ~]# systemctl restart mysqld
[root@localhost ~]# mysql -uroot -ppwd123
mysql> use auth
mysql> CREATE TABLE t2 (user_name CHAR(16), user_passwd CHAR(48));
mysql> show table status from auth where name='t2'\G
注意:
通过配置文件修改的方法,对以前的老表不会有影响,只会影响以后新创建的表,并且在创建表时没有指定存储引擎的情况。
(4)通过 create table 创建表时指定存储引擎
mysql> use auth
mysql> create table t3 (id int(10),name char(20)) engine=INNODB;
mysql> show table status from auth where name='t3'\G
(5)临时修改默认的存储引擎
SET default_storage_engine=< 存储引擎名 >