mysql函数,触发器,存储过程,视图,索引

Mysql
一 : 函数
(一) 字符函数
mysql函数,触发器,存储过程,视图,索引
(二) 数值函数
mysql函数,触发器,存储过程,视图,索引
(三) 日期时间
mysql函数,触发器,存储过程,视图,索引
(四) 流程函数
mysql函数,触发器,存储过程,视图,索引
(五) 其他函数
mysql函数,触发器,存储过程,视图,索引
(六) 自定义函数

  1. 语法
    mysql函数,触发器,存储过程,视图,索引
  2. 简单的函数
    返回666
    mysql函数,触发器,存储过程,视图,索引
  3. 无参函数
    返回student表中的数据的行数
    mysql函数,触发器,存储过程,视图,索引
  4. 有参函数
    根据id查询student的name
    mysql函数,触发器,存储过程,视图,索引
    二 : 触发器
    (一) 概述
    针对于一类或几类操作(增删改), 同时进行的监听操作

触发器一旦创建, 无需任何操作, 自动运行

(二) 语法
mysql函数,触发器,存储过程,视图,索引
(三) 案例

  1. 新增
    mysql函数,触发器,存储过程,视图,索引
  2. 修改
    mysql函数,触发器,存储过程,视图,索引
  3. 删除
    mysql函数,触发器,存储过程,视图,索引
    三 : 存储过程
    (一) 概述
    可以理解为存储过程就是对sql语句的封装
    Sql是存在数据库中, 用的时候直接调用, 省去了编译的时间

(二) 语法
mysql函数,触发器,存储过程,视图,索引
(三) 优缺点
优点: 提速, 可以忽略不记
缺点: 无法迁移, 团队开发受阻, 维护不易, 复杂业务逻辑处理难度大

不建议使用

(四) 案例

  1. 查询学生信息的条数
    mysql函数,触发器,存储过程,视图,索引
  2. 根据id查询学生信息
    mysql函数,触发器,存储过程,视图,索引
  3. 查询编号为1的学生姓名
    mysql函数,触发器,存储过程,视图,索引
  4. 根据id查询学生姓名
    mysql函数,触发器,存储过程,视图,索引
  5. 一个参数即做传入参数, 有做传出参数
    mysql函数,触发器,存储过程,视图,索引
    四 : 视图
    (一) 概述
    视图是虚拟表, 依赖于真实存在的表
    视图和真实表一样
    视图存放的是视图的定义, 而不是视图的数据 --> 视图中存的不是真实数据
    视图中存的就是sql

(二) 作用

  1. 简化sql的编写
  2. 隐藏私密数据, 提高数据的安全性

(三) 语法
mysql函数,触发器,存储过程,视图,索引
简化版
mysql函数,触发器,存储过程,视图,索引
(四) 案例

  1. 校验是否拥有创建视图的权限
    mysql函数,触发器,存储过程,视图,索引
  2. 查询学生编号, 学生姓名, 学生性别, 隐藏学生的生日
    mysql函数,触发器,存储过程,视图,索引
  3. 删除视图
    mysql函数,触发器,存储过程,视图,索引
    五 : 索引
    (一) 概述
    索引是一种特殊的文件, 可以理解成是书中的目录

没有索引, 数据库会采用全盘扫描的方式读取数据
有索引, 数据库会在索引中查询数据

数据库默认为id创建索引

(二) 分类

  1. 聚簇索引: 数据和索引存在一起

  2. 非聚簇索引: 数据和索引分开存放

(三) 类型

  1. 普通索引: 没有任何限制
    创建方式
    方式一:
    CREATE INDEX index_name ON table(column(length))
    方式二:
    ALTER TABLE table_name ADD INDEX index_name ON (column(length))
    方式三:
    CREATE TABLE table (
    id int(11) NOT NULL AUTO_INCREMENT ,
    title char(255) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL ,
    content text CHARACTER SET utf8 COLLATE utf8_general_ci NULL ,
    time int(10) NULL DEFAULT NULL ,
    PRIMARY KEY (id),
    INDEX index_name (title(length))
    );

  2. 唯一索引: 要求该字段的值唯一
    方式一:
    CREATE UNIQUE INDEX index_name ON table(column(length))
    方式二:
    ALTER TABLE table_name ADD UNIQUE INDEX index_name ON (column(length))
    方式三:
    CREATE TABLE table (
    id int(11) NOT NULL AUTO_INCREMENT ,
    title char(255) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL ,
    content text CHARACTER SET utf8 COLLATE utf8_general_ci NULL ,
    time int(10) NULL DEFAULT NULL ,
    PRIMARY KEY (id),
    UNIQUE indexName (title(length))
    );

  3. 符合索引

编写返回自定义长度字符串的函数
mysql函数,触发器,存储过程,视图,索引
编写插入指定条数的存储过程
mysql函数,触发器,存储过程,视图,索引
插入1000万条数据
mysql函数,触发器,存储过程,视图,索引
查询time
mysql函数,触发器,存储过程,视图,索引
执行时间1.2s, 太慢了…

构建索引
mysql函数,触发器,存储过程,视图,索引
再次执行, 执行时间缩短到0.060s

标题查询也很常见, 建立复合索引
mysql函数,触发器,存储过程,视图,索引
测试
mysql函数,触发器,存储过程,视图,索引
经测试发现
单独使用title可以提高查询效率
使用title和time也可以提高查询效率
单独使用time则索引无效

(四) 小结
索引类型: 普通索引, 唯一索引, 组合索引(复合索引)
创建方式: create index indexName on table(column…)
复合索引的使用原则: 最佳左前缀法则

(五) 总结

  1. Like %不能写在左边
  2. Null 索引也会失效
  3. != 也会造成索引失效
  4. Or 也会造成索引失效
  5. 最佳左前缀法则
  6. 索引列的字段不能进行计算
  7. Select 后面不要写* , 尽量写索引列的字段(覆盖索引)
  8. 索引的使用要在数据量300w以上
  9. , >=类似这些虽然也能用到索引, 索引部分失效

  10. 索引个数不要超过5个(建议)