存储引擎

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较频繁的场景   可以大大增加系统的可用性

 

posted @ 2017-12-14 21:37  吾漫兮  阅读(206)  评论(0编辑  收藏  举报