触发器
一、触发器的概述
触发器是由事件来触发某个操作。事件包括INSETR、 UPDATE、DELETE。
当对数据表中的数据执行插入、更新、删除的时候,需要自动执行一些数据库逻辑的时候,可以使用触发器。
二、触发器的创建
(1)
CREATE TRIGGER 触发器名称
BEFORE|AFTER INSERT|UPDATE|DELETE ON 表名
FOR EACH ROW
触发需要执行的语句;
(2)触发器的创建与使用
查看当前所有触发器
SHOW TRIGGERS;
查看某个具体的触发器
SHOW CREATE TRIGGERS 触发器名;
SELECT * FROM information_schema.TRIGGERS;
举例:
(3)删除触发器
DROP TRIGGER 触发器名;
三、触发器的优点与缺点
(1)触发器的优点
1、可以保证数据的完整性
2、触发器可以帮助记录操作日志
3、触发器还可以再操作数据前,对数进行合法性检查
(2)触发器的缺点
1、可读性差
2、相关数据的变更,可能会导致触发器报错
MySQL8.0新特性
1、更简便的MySQL支持
2、更好的索引
3、更完善的JSON支持
4、安全和账户管理
5、InnoDB
6、数据字典
7、原子数据定义语句
8、资源管理
9、字符集支持
10、优化器增强
11、公用表表达式
12、窗口函数
13、正则表达式支持
14、内部临时表
15、日志记录
16、备份锁
17、增强的MySQL复制
窗口函数
窗口函数将结果置于每一条数据。
从状态上分类,可以分为静态窗口函数和动态窗口函数
1、语法格式
函数 OVER (PARTITION BY 字段名 ORDER BY 字段名 ASC[DESC])
或者
函数 OVER 窗口名 … WINDOWS 窗口名 AS (PARTITION BY 字段名 ORDER BY 字段名 ASC[DESC])
2、函数的分类
序号函数:
ROW_NUMBER()举例:
结果展示:
根据PARTITION BY department_id 分类,但仍然分列数据而不是像GROUP BY组函数进行整合。
分部函数:
PERCENT_RANK()举例:
结果展示:
前后函数:
举例:
结果展示:
首尾函数:
举例:
结果展示:
公用表表达式 CTE
公用表表达式(或通用表表达式)简称为CTE(Common Table Expressions)。CTE是一个命名的临时结果集,作用范围是当前语句。CTE可以理解为一个可以复用的子查询。
公用表表达式分为普通公用表表达式和递归公用表表达式。
1、普通公用表表达式
书写格式
WITH cte名称
AS(子查询语句)
SELECT 查询语句;
举例:
2、递归公用表表达式