存储引擎
1、show engines;查看引擎
默认是innodb
对于特定的表,也可以使用desc create table 表名; //查看表的引擎
默认引擎是innodb
2、修改引擎
alter table 表名 set engine=引擎类型;
3、四个常用的引擎
①myisam 不支持事务,不支持外键,访问速度快
适用于对事务完整性没有要求,以select、insert为主的应用
在磁盘上被存储为3个文件:存储表定义 .frm,存储数据 .myd,存储索引 .myi
支持3种存储格式:静态表(默认),定长,速度快,缺:浪费空间,会自动去掉末尾的空格
动态:变长,造成碎片
压缩表:占用空间小
a 自动增长 自动增长列必须是索引或组合索引,可以是索引的任意列
test1: 索引的第二列
create table auto_increment_myisam_demo(
id1 int auto_increment not null,
id2 int not null,
name varchar(10),
index(id2,id1)
)engine myisam;
insert into auto_increment_myisam_demo(id2,name) values(1,'1'),(2,'2'),(3,'3'),(1,'1'),(2,'2'),(1,'1')
结果按照组合索引中第一列进行排序后递增
test2: 索引的第一列
create table auto_increment_myisam_demo1(
id1 int auto_increment not null,
id2 int not null,
name varchar(10),
index(id1,id2)
)engine myisam;
insert into auto_increment_myisam_demo(id2,name) values(1,'1'),(2,'2'),(3,'3'),(1,'1'),(2,'2'),(1,'1')
按照索引中第一列,也就是自动增长列递增
②innodb 提交、回滚、崩溃恢复能力的安全事务 缺:处理效率差、占用更多磁盘保存数据和索引
1、自动增长必须是索引,当索引是组合索引时必须是索引的第一列
create table auto_increment_innodb_demo(
id1 int auto_increment not null,
id2 int not null,
name varchar(10),
index(id1,id2)
)engine innodb;
select last_insert_id();//查询当前线程最后插入记录的使用值,如果一次性插入了多条记录,则返回第一条记录使用的自动增长值
2、外键约束
innodb 是mysql 数据库唯一支持外键约束的引擎
创建外键的时候要求其父表中必须有对应的索引,子表在创建外键的时候会自动的创建索引
3、存储方式
a 共享表空间存储
表结构保存在.frm文件中,数据和引擎保存在innodb_data_home_dir和innodb_data_file_path定义的表空间中
b 多表存储空间
表结构保存在.frm文件中,数据和引擎单独保存在.ibd中。如果是分区表,每个分区对应单独的.ibd文件,文件名是表名+分区名,可以在创建分区的时候指定每个分区 的数据文件的位置,以此将表的IO均匀分布在多个磁盘上。在多表存储中的,进行备份和恢复操作时,只复制.ibd文件不行,因为没有共享表空间的数据字典信息
alter table 表名 discare tablespace;
alter table 表名 import tablespace;
注:在多表存储空间的存储方式下,共享表存储仍然是必要的,因为innodb将内部数据词典和在线重做日志放在 这个文件中
③memory存储引擎
使用内存中的内容来创建表,访问速度快,每个memory 表只对应一个磁盘文件.frm默认使用hash索引,但是一旦服务器关闭,表中的数据丢失
主要用于内容变化不频繁的代码表,或统计的中间结果表,便于高效的对中间结果进行分析
④merge表
是一组结构相同的myisam表的组合,本身没有数据,对merge类型的表的操作实际上是对其内部的myisam表的操作
对于merge表的插入操作,根据insert_method来指定插入的表,有3个取值:first,last,no 分别表示对第一张表插入,最后一张表插入,不能插入
采用drop命令删除,只能删除merge表的定义,对于其内部的myisam表没有影响
create table merge_test(
id int
)engine=myisam union(merge_test1,merge_test2) insert_method=last
⑤第三方存储引擎
tokudb 高写性能高压缩引擎
适用场景:日志数据 日志通常插入频繁并且存储量大
历史数据 通常不会再有写操作,可以利用tokudb高压缩特性
在线DDL较频繁的场景 可以大大增加系统的可用性