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就会自动启动了。
  • 相关阅读:
    数据结构化与保存
    使用正则表达式,取得点击次数,函数抽离
    爬取校园新闻首页的新闻
    网络爬虫基础练习
    词频统计
    试题----编写一个截取字符串的函数,输入为一个字符串和字节数,输出为按字节截取的字符串。 但是要保证汉字不被截半个
    试题---求出现重现次数最多的字母,如有多个重复的则都求出来
    试题----为什么Java的string类要设成immutable(不可变的)
    面试题---题目
    复制文件夹中所有内容到指定位置
  • 原文地址:https://www.cnblogs.com/herzog/p/4237784.html
Copyright © 2011-2022 走看看