• 初试mysql存储过程&触发器


    玩mysql以来,一直没有试过实现存储过程,因为存储过程的语法看起来有些笨重。所以一直采用手动批量运行查询,而且要手动改日期之类的参数。
    今天尝试着学了一会,发现其实是很简单的。语法上确实格式复杂些,但是实现起来有章可循。于是花了一个小时就把最近一个小项目的批量sql改成了存储过程。
    先作简要笔记,记录最基础的语法。

    存储过程的基本格式

    CREATE PROCEDURE icarus_daily(in pmonth VARCHAR(6),in cmonth VARCHAR(6)) 
    BEGIN
    
    # 运用MYSQL的日期函数作了一些日期计算
    DECLARE pm2 VARCHAR(7);
    DECLARE cm2 VARCHAR(7);
    SET cm2 = substr(CURRENT_DATE(),1,7);
    SET t_day = substr(CURRENT_DATE(),9,2) + 1;
    SET pm2 = substr(DATE_SUB(CURRENT_DATE(),INTERVAL t_day DAY),1,7);
    
    #... 中间省略若干行
    
    # 对表格的处理,爱用replace替代insert
    replace into icarus_gsm_onlist select * from icarus_gsm_remain where dmonth like cm;
    replace into icarus_td_onlist select * from icarus_td_remain where dmonth like cm;
    replace into icarus_lte_onlist select * from icarus_lte_remain where dmonth like cm;
    replace into icarus_gsm_onlist select * from icarus_gsm_newlist where dmonth like cm;
    replace into icarus_td_onlist select * from icarus_td_newlist where dmonth like cm;
    replace into icarus_lte_onlist select * from icarus_lte_newlist where dmonth like cm;
    
    # 用于观察处理结果
    select
     (select count(*) from icarus_gsm_newlist) as GSM,
     (select count(*) from icarus_td_newlist) as TD,
     (select count(*) from icarus_lte_newlist) as LTE;
    
    # 建立一个eventlog表保存运行记录
    replace into icarus_eventlog select "p_incarus_daily",now();
    
    END
    

    利用触发器调用存储过程

    很简单,不详述。
    唯一的问题是,本来存储过程通过参数传递本月和上月日期的,但是不知道怎么在触发器调用时自动获取当前月份。所以只好让存储过程自己默认判断当前时间信息了。

    Mysql触发器的设置

    • Mysql的触发器功能默认是关闭的,需要人工开启
    # 查看触发器是否开启
    SHOW VARIABLES LIKE "%event_scheduler%";
    # 开启定时器
    SET GLOBAL event_scheduler = ON;
    
    • mysql启动文件配置:在mysql安装的文件夹下找到配置文件my.ini,在[mysqld]的下面加上一句:event_scheduler=ON。这样mysql在启动的时候event sheduler就会自动启动了。
  • 相关阅读:
    随机森林算法参数调优
    BAYES和朴素BAYES
    阿里云 金融接口 token PHP
    PHP mysql 按时间分组 表格table 跨度 rowspan
    MySql按周,按月,按日分组统计数据
    PHP 获取今日、昨日、本周、上周、本月的等等常用的起始时间戳和结束时间戳的时间处理类
    thinkphp5 tp5 会话控制 session 登录 退出 检查检验登录 判断是否应该跳转到上次url
    微信 模板消息
    php 腾讯 地图 api 计算 坐标 两点 距离 微信 网页 WebService API
    php添加http头禁止浏览器缓存
  • 原文地址:https://www.cnblogs.com/herzog/p/4237784.html
Copyright © 2020-2023  润新知