数据定义语言 (Data Definition Language, DDL) 是 SQL 语言集中,负责数据结构定义与数据库对象定义的语言,主要包括三个关键字:create ,alter , drop(数据库关键字不分大小写 ),主要操作对象 有数据库、表、索引、视图等。
例如:ALTER TABLE t_table_name ADD COLUMN column_b INT NOT NULL AFTER column_a;
数据操纵语言(Data Manipulation Language, DML)是 SQL 语言中,负责对数据库对象运行数据访问工作的指令集,以 INSERT、UPDATE、DELETE 三种指令为核心,分别代表插入、更新与删除。
例如:INSERT、UPDATE、DELETE 语句
数据查询语言(Data Query Language, DQL)是 SQL 语言中,负责进行数据查询而不会对数据本身进行修改的语句,这是最基本的 SQL 语句。保留字 SELECT 是 DQL(也是所有 SQL)用得最多的动词,其他 DQL 常用的保留字有 FROM,WHERE,GROUP BY,HAVING 和 ORDER BY。这些 DQL 保留字常与其他类型的 SQL 语句一起使用。
例如:SELECT * FROM t_table_name
数据控制语言 (Data Control Language) 在 SQL 语言中,是一种可对数据访问权进行控制的指令,它可以控制特定用户账户对数据表、查看表、预存程序、用户自定义函数等数据库对象的控制权。由 GRANT 和 REVOKE 两个指令组成。DCL 以控制用户的访问权限为主,GRANT 为授权语句,对应的 REVOKE 是撤销授权语句。
例如:GRANT select, insert, delete ON mytable TO myuser;
关于 mysql 主要关注于数据查询语言(DQL)
以下所有内容均以 innodb 引擎为基础。
查询语句关注索引
一种特殊的唯一索引,不允许有空值。(主键约束 = 唯一索引 + 非空值)
索引列中的值必须是唯一的,但是允许为空值。
MySQL 中的加索引类型,没啥限制。允许空值和重复值,纯粹为了提高查询效率而存在。
多列值组成一个索引,专门用于组合搜索,其效率大于索引合并。注意,使用它的时候需要遵守最左匹配原则。多个列作为查询条件时,组合索引在工作中很常用。
注:innodb 没有全文索引
B+Tree 是 B-Tree 的变种,所具有的特点:
通过索引的 key 进行一次 hash 计算,就可以快速获取磁盘文件指针,对于指定索引查找文件非常快,但是对于范围查找没法支持,有时候也会出现 Hash 冲突的情况。
1,频繁作为查询条件的字段创建索引
2,唯一性太差的字段不单独创建索引,即使频繁作为查询条件
3,更新频繁的字段不创建索引
4,不会出现在 where 中的字段不创建索引
5、不是索引越多越好,有成本
1、空间:创建一个索引,就要创建一个 b+ 树,增加存储空间
2、时间:表中数据进行增删改的时候,都会修改各个 b+ 树的索引
查询前生成执行计划时,会判定哪个是最优的索引,索引个数太多,会增加耗时