mysql函数,触发器,存储过程,视图,索引
Mysql
一 : 函数
(一) 字符函数
(二) 数值函数
(三) 日期时间
(四) 流程函数
(五) 其他函数
(六) 自定义函数
- 语法
- 简单的函数
返回666 - 无参函数
返回student表中的数据的行数 - 有参函数
根据id查询student的name
二 : 触发器
(一) 概述
针对于一类或几类操作(增删改), 同时进行的监听操作
触发器一旦创建, 无需任何操作, 自动运行
(二) 语法
(三) 案例
- 新增
- 修改
- 删除
三 : 存储过程
(一) 概述
可以理解为存储过程就是对sql语句的封装
Sql是存在数据库中, 用的时候直接调用, 省去了编译的时间
(二) 语法
(三) 优缺点
优点: 提速, 可以忽略不记
缺点: 无法迁移, 团队开发受阻, 维护不易, 复杂业务逻辑处理难度大
不建议使用
(四) 案例
- 查询学生信息的条数
- 根据id查询学生信息
- 查询编号为1的学生姓名
- 根据id查询学生姓名
- 一个参数即做传入参数, 有做传出参数
四 : 视图
(一) 概述
视图是虚拟表, 依赖于真实存在的表
视图和真实表一样
视图存放的是视图的定义, 而不是视图的数据 --> 视图中存的不是真实数据
视图中存的就是sql
(二) 作用
- 简化sql的编写
- 隐藏私密数据, 提高数据的安全性
(三) 语法
简化版
(四) 案例
- 校验是否拥有创建视图的权限
- 查询学生编号, 学生姓名, 学生性别, 隐藏学生的生日
- 删除视图
五 : 索引
(一) 概述
索引是一种特殊的文件, 可以理解成是书中的目录
没有索引, 数据库会采用全盘扫描的方式读取数据
有索引, 数据库会在索引中查询数据
数据库默认为id创建索引
(二) 分类
-
聚簇索引: 数据和索引存在一起
-
非聚簇索引: 数据和索引分开存放
(三) 类型
-
普通索引: 没有任何限制
创建方式
方式一:
CREATE INDEX index_name ON table(column(length))
方式二:
ALTER TABLE table_name ADD INDEX index_name ON (column(length))
方式三:
CREATE TABLEtable
(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))
); -
唯一索引: 要求该字段的值唯一
方式一:
CREATE UNIQUE INDEX index_name ON table(column(length))
方式二:
ALTER TABLE table_name ADD UNIQUE INDEX index_name ON (column(length))
方式三:
CREATE TABLEtable
(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))
); -
符合索引
编写返回自定义长度字符串的函数
编写插入指定条数的存储过程
插入1000万条数据
查询time
执行时间1.2s, 太慢了…
构建索引
再次执行, 执行时间缩短到0.060s
标题查询也很常见, 建立复合索引
测试
经测试发现
单独使用title可以提高查询效率
使用title和time也可以提高查询效率
单独使用time则索引无效
(四) 小结
索引类型: 普通索引, 唯一索引, 组合索引(复合索引)
创建方式: create index indexName on table(column…)
复合索引的使用原则: 最佳左前缀法则
(五) 总结
- Like %不能写在左边
- Null 索引也会失效
- != 也会造成索引失效
- Or 也会造成索引失效
- 最佳左前缀法则
- 索引列的字段不能进行计算
- Select 后面不要写* , 尽量写索引列的字段(覆盖索引)
- 索引的使用要在数据量300w以上
-
, >=类似这些虽然也能用到索引, 索引部分失效
- 索引个数不要超过5个(建议)