什么是存储引擎?
存储引擎就是一套程序,负责将用户的表示层(sql语句)数据转换成物理层(数据库数据文件)数据的一套程序。
MySQL是插件式的存储引擎. 什么是插件式存储引擎?
MySQL为了支持更灵活的架构,它把存储引擎做成一个插件式的,任何第三方都可以开发自己的插件,
来用于存储引擎完成从表示层到物理层,或物理层到表示层的双向转换。
因此MySQL拥有多种不同的存储引擎,不同的存储引擎所支持的特性是不一样的,
有的存储引擎支持事务,有的则不支持等等。MySQL支持我们自由选择所使用的存储引擎,但Oracle不支持。
MySQL的两个比较常见的存储引擎
存储引擎也被称为表类型
SHOW ENGINES; # 查看当前数据库支持的所有存储引擎 SHOW TABLE STATUS LIKE '表名'G # 可以查看到一张表的属性信息,可以看到这张表是什么存储引擎
MyISAM存储引擎(无事务,表锁):
MySQL5.5.8之前默认存储引擎
不支持事务
MyISAM性能比较好,特别适用于查询比较多,而修改比较少的场景,所以特别适合数据存储。
每表三个文件
.frm: 表结构
.MYD: 表数据
.MYI: 表索引
InnoDB存储引擎(事务,行锁):
MySQL5.5.8之后,Oracle收购MySQL之后,默认的存储引擎
支持事务
InnoDB特别适用于在线事务处理系统(查询和修改都比较多),比如论坛(随时有人发帖,有人看帖)
所有表共享一个表空间文件(不推荐)
建议: 每表一个独立的表空间文件
.frm: 表结构
.idb: 表空间(表数据和表索引)
使用InnoDB引擎要做的事情
# 每表一个独立的表空间文件(推荐) innodb_file_per_table # 设置InnoDB表空间文件的存储路径 innodb_data_home_dir="D:/MySQL5.5/InnoDB"
db.opt是什么?
我们发现,每个数据库中都存在一个db.opt的文件,它是一个ASCII text文件,它定义了这个数据库使用的字符集和排序规则
它的内容类似下面这样
default-character-set=gbk default-collation=gbk_chinese_ci