zoukankan      html  css  js  c++  java
  • 初试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就会自动启动了。
  • 相关阅读:
    Android自定义属性,format详解
    设置EditText是否可编辑
    Android中Application设置全局变量以及传值
    android:ellipsize属性的含义
    Java集合框架List,Map,Set等全面介绍
    二十款漂亮的CSS字体样式,让你受用非浅
    IE浏览器不见了
    display属性值:
    用CSS设置多个背景、背景渐变、指定背景大小
    [转]IE6双倍边距——IE布局BUG集锦
  • 原文地址:https://www.cnblogs.com/herzog/p/4237784.html