MYSQL 基础
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 视图名称;