SQL分类:

    DDL(Data Definition Language),数据定义语言,主要是定义数据库、表、列、索引等数据库对象,常用关键字为:create、drop、alter等。

    DML(Data Manipulation Language),数据操纵语言,主要是添加、删除、修改、查询数据库记录以及数据完整性,常用关键字为:insert、delete、select、update等。

    DCL(Data Control Language),数据控制语言,主要是定义了数据库、表、字段、用户的访问权限和安全级别,常用关键字为:grant、revoke等。

 存储引擎的特性:

    MyISAM:是mysql默认的存储引擎,MYISAM不支持事物、也不支持外键,优势在于访问速度快,对事物完整性没有要求或者以select、insert为主的引用可以使用这个引擎创建表。

    InnoDB:具有提交、回滚和崩溃恢复能力的事物安全。与MYISAM引擎对比,效率差一些,并且会占用更多的磁盘空间以保留数据和索引。(常用)

        特点:

          (1)自动增长列:innoDB表的自动增长列,可以手动插入,但是插入的是0或者空,则实际插入的将是自动增长后的值。

          (2)外键约束:MySQL支持外键的存储引擎只有InnoDB,创建外键的时候,要求父表必须有对应的索引(字段),子表在创建外键的时候也会自动创建对应的索引。

          (3)存储方式:共享表空间存储和多表空间存储。

    MEMORY:使用存在于内存中的内容来创建表。每个memory只实际对应一个磁盘文件,格式.frm。memory类型的表访问速度非常快,服务关闭,表会丢失掉。

    MERGE:是一组MYISAM表的组合,与MYISAM表必须结构完全相同,MERGE表本身没有数据。可以对MERGE类型表进行查询、更新、删除操作,实际这些操作是在内部MYISAM表上。

    TokuDB:是一个高性能、支持事物处理的MYSQL和MariaDB的存储引擎,具有高扩展性、高压缩率、高效的写入能力,支持大多数的DDL操作。

        特性:

          (1)使用Fractal树索引保证高效的插入性能;

          (2)优秀的压缩特性,比InnoDB高近10倍;

          (3)Hot Schema changes特性支持在线创建索引和添加、删除属性列等DDL操作;

          (4)使用Bulk Loader达到快速加载大量数据;

          (5)提供了主从延迟消除技术;

          (6)支持ACID(事务特性)和MVCC.

        适用场景:日志数据,因为日志通常插入频繁且存储量大;

             历史数据,通常历史数据不会再有写操作,可以进行高压缩特性进行存储;

             在线DDL较频繁的场景,大大增加系统的可以性。 

  索引

    MYISAM和InnoDB存储引擎的表默认创建的都是BTree索引,Mysql目前不支持函数索引,但是支持前缀索引;

    Memory存储引擎是默认采用hash索引,也支持Btree索引。

 

    BTREE树和HASH索引的区别(适用范围):

         Hash索引:

             (1)只用于适用=或<=>操作符的等式比较;

             (2)优化器不能使用Hash索引来加速ORDER BY操作;

             (3)只能使用整个关键字来搜索行;

             (4)MYSQL不能确定两个值之间大约多少行,将MYISAM表改为Hash索引的memory表,会影响查询效率。

         BTree索引:当使用>、<、>=、<=、between、!=或者<>、或者like(模糊搜索不能以通配符开始)操作符时,可以使用相关列上的索引。

  视图

      创建视图:create or replace view view_name(视图名称) as select 字段(或者*) from 表名;

      (可以对视图进行条件设置:with local check option或者with cascaded check option),

        local :表示只要满足视图条件就可以更新,cascaded 则必须满足索引针对该视图的所有视图条件才能更新。

       删除视图:drop view 视图名称;

      修改视图:可以使用创建视图语法,存在该视图,则使用修改语法对原视图进行修改,

           另一种使用ALTER [ALGORITHM={UNDEFINED | MERGE | TEMPTABLE}] 
            VIEW view_name [(column_list)]  AS SELECT_statement  [WITH [CASCADED | LOCAL] CHECK OPTION] 

       查看视图:show table status {from 数据库名称/使用like ‘’视图名称}; 

       查询某个视图:show create view 视图名称;