MySQL 系统学习系列 - 数据库触发器与函数的使用《MySQL系列篇-07》

数据库触发器与函数的使用

触发器

1. 基本简介

  • 触发器(TRIGGER)是由事件来触发某一个操作(包括INSERT、UPDATE、DELETE语句),当数据库系统执行这些事件时,会激活触发其执行相应的操作

  • 当对某表做增删改操作时,可以使用触发器自定义关联行为,注意使用触发器时也需要使用 delimiter 将sql的结束符修改了先

  • 可以理解为是编程中的事件一样

  • 语法

    • create trigger 触发器名称 触发时间(after/befor)
        触发事件(insert/update/delete) -- 当填写一种时,其它操作不会激活触发器
        on 监视的表(即在那一张表中建立触发器)
        for each roe (行级触发器)
        begin
          sql语句(希望改变的数据,可写多条语句,每条语句必须使用;结尾) -- 所以我们需要将sql语句默认的结束符给修改掉
        end;
        
      -- 触发器一般不对同一张表进行操作
      

2. 基本使用

  • 一旦拥有触发器的数据表执行插入、修改和删除操作,就会自动触发相应的事件

  • delimiter $$ -- 修改sql语句的结束符
    CREATE TRIGGER tr AFTER INSERT ON students -- 表示当students插入一条数据后激活触发器
      FOR EACH ROW -- 行级触发器,修改一行触发一次
      BEGIN
              -- ---------------------触发器要执行的操作--------------------------
              INSERT INTO grade VALUES(0,"students表中的触发器") -- 激活触发其后,向grade插入行数据
      END$$
    delimiter ; -- 恢复sql语句的结束符
      
    -- -----------------辅助语句------------------
    INSERT INTO students VALUES(0,"wangwu",2);
    SELECT * FROM students;
    

3. 查看触发器 show triggers

4. 删除触发器 drop trigger 触发器名称

函数

函数的基本了解

MySQL数据库提供的内部函数,可以帮助用户更加方便地处理表中的数据

函数的分类: 数值型函数、字符串型函数、日期和时间函数、集合函数、流程判断函数等

1.常用的数值型函数

  • 函数名称作用
    RAND取随机数,可设置参数种子
    ABS求x的绝对值
    SIGN求x的正负符号
    SQRT求X的平方根
    POW求x的y次方
    MOD取余,求N除以M的模
    LOG求以B为底X的对数
    CEIL,FLOOR向上,向下取整
    ROUND对X的第D位四舍五入
    TRUNCATE保留X小数点后D位
    PI取π的值
    DEGREES,RADIANS弧度,角度间的转换
    SIN,COS,TAN正弦,余弦,正切
    ASIN,ACOS,ATAN,COT反正弦,反余弦,反正切

2.字符串函数

  • 函数名称作用
    LENGTH返回字符串长度
    CONCAT合并字符串函数,参数可以是一个或多个
    INSERT替换字符串函数设
    LOWER将字符串中的字母转换成小写
    UPPER将字符串中的字母转换成大写
    LEFT从左侧截取,返回字符串左边的若干个字符
    RIGHT从右侧截取,返回字符串右边的若干个字符
    TRIM删除字符前后空格
    REPLACE字符串的替换
    SUBSTRING截取字符串,从指定位置开始的指定长度字符串
    REVERSE反转字符串

3.日期和时间函数

  • 函数名称作用
    CURDATE和CURRENT_DATE两个函数的作用相同,返回当前系统的日期值
    CURTIME和 CURRENT_TIME两个函数的作用相同,返回当前系统的时间值
    NOW 和 SYSDATE两个函数的作用相同,返回当前系统的日期和时间值
    UNIX TIMESTAMP获取UNIX时间戳函数,返回一个以UNIX时间戳为基础的无符号整数
    FROM UNIXTIME将UNIX时间戳转换为时间格式,与UNIX_TIMESTAMP互为反函数
    MONTH获取指定日期中的月份
    MONTHNAME获取指定日期中的月份的英文名称
    DAYNAME获取指定日期对应的星期几的英文名称
    DAYOFWEEK获取指定日期对应的一周的索引位置值
    WEEK获取指定日期是一年中的第几周,返回值的范围是0~52或1~53
    DAYOFYEAR获取指定日期是一年中的第几天,返回值范围是1~366
    DAYOFMONTH获取指定日期是一个月中的第几天,返回值范围是1~31
    YEAR获取年份,返回值是 1970~2069
    TIME TO SEC将时间参数转换为秒数
    SEC_ TO_TIME将秒数转换为时间,与TIME TO SEC互为反函数
    DATE ADD 和 ADDDATE两个函数的功能相同,都是向日期中添加指定的时间间隔
    DATE_SUB 和 SUBDATE两个函数的功能相同,都是从日期中减去指定的时间间隔
    ADDTIME时间加法运算,在原始时间上添加指定的时间
    SUBTIME时间减法运算,在原始时间上减去指定的时间
    DATEDIFF获取两个日期之间的间隔,返回参数1减去参数2的值
    DATE_FORMAT格式化指定的日期,根据参数返回指定格式的值
    WEEKDAY获取指定日期在一周内的对应的工作日索引

4.常用的聚合函数

  • 函数名称作用
    MAX查询指定列的数据的最大值
    MIN查询指定列的数据的最小值
    COUNT统计查询结果的行数
    SUM求和,返回指定列的数据的总和
    AVG求平均值,返回指定列的数据的平均值

5.常用的流程判断函数

  • 函数名称作用
    F根据判断条件的结果为TRUE或FALSE,返回第一个值或第二个值,也可以进行嵌套使用。 例 如:IF(value, valuel, value2),如果 value的值为TRUE,则返回 valuel;否则,返 回 value2
    IFNULL接受两个参数,如果第一个参数不为 NULL,返回第一个参数;如果第一个参数是 NULL,则 返回第二个参数。例如:IFNULL(valuel, value2),如果 valuel 不为NULL,返 回 value1;否 则,返回value2
    NULLIF接受两个参数,如果第一个参数等于第二个参数,则返回 NULL;否则,返回第一个参 数。例 如:NULLIF(valuel, value2),如果 valuel= value2,则返回NULL;否则,返回 valuel
    CASE WHEN进行多重判断。例如:CASE WHEN 条件1THEN 结果1WHEN 条件2THEN 结果 2-ELSE [结果 N] END,如果条件1为TRUE,返回结果1……如果前面所有条件都不成立,则返回 结果N

函数的基本使用(常用)

自定义函数

语法格式:

  • create function 函数名([参数,...])
    returns 类型
    函数体
      
    -- 参数:中有名称和类型,不能指定输入输出
    -- 类型:声明函数的返回值类型
    -- 函数体:由SQL语句和流程语句组成,必须包含returns语句
      
    create function 函数名([参数,...])
      returns 类型
      begin
        -- sql语句或流程控制语句
        return -- 返回值,必须得有
      end;
    
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值