需要在MySQL数据库中完成一个定时任务,把用到的知识点整理一下。
1.定时器
1)使用定时器之前查看定时任务是否打开
show variables like 'event_scheduler';
或
select @@event_scheduler;
2)启用定时任务
set global event_scheduler=ON;
或
set global event_scheduler=1;
重启数据库后,定时任务是不会自动启用的。
可以在 my.ini 的[mysqld]节中增加
event_scheduler=1 的配置。
或在启动命令加上"--event_scheduler=1"
如 mysqld ... --event_scheduler=1
3)创建事件
CREATE EVENT [IF NOT EXISTS] event_name
ON SCHEDULE schedule
[ON COMPLETION [NOT] PRESERVE]
[ENABLE | DISABLE]
[COMMENT 'comment']
DO sql_statement;
schedule:
AT TIMESTAMP [+ INTERVAL interval]
| EVERY interval [STARTS TIMESTAMP] [ENDS TIMESTAMP]
interval:
quantity {YEAR | QUARTER | MONTH | DAY | HOUR | MINUTE |
WEEK | SECOND | YEAR_MONTH | DAY_HOUR | DAY_MINUTE |
DAY_SECOND | HOUR_MINUTE | HOUR_SECOND | MINUTE_SECOND}
ON SCHEDULE 用于指定事件执行的时间。
ON COMPLETION 用于指定事件执行完后是否重复执行。
ENABLE | DISABLE 用于指定事先创建完后是否可用。
COMMENT 用于为事件增加备注。
DO 用于指定事件执行的sql语句。
4)修改事件
ALTER EVENT event_name
[ON SCHEDULE schedule]
[RENAME TO new_event_name]
[ON COMPLETION [NOT] PRESERVE]
[COMMENT 'comment']
[ENABLE | DISABLE]
[DO sql_statement]
5)删除事件
DROP EVENT [IF EXISTS] event_name
2.存储过程
具体语法不详细说明了,只记录一点:MySQL应该和Sybase数据库一样,支持两套语法规则。
一种是MySQL官方手册中介绍的,使用declare显式声明变量,set设置变量值。
另一种是可以不用declare声明变量,直接使用set隐式声明变量,同时设置变量值。
两种语法规则的区别在于,官方的提倡的用法可以使用start transaction,commit和rollback等事务语句,而隐式声明变量的语法不支持。
3.常用函数
3.1.日期字符串转换
1)日期转为字符串
DATE_FORMAT(date,format)
参考:http://www.w3school.com.cn/sql/func_date_format.asp
实例:DATE_FORMAT(NOW(), '%Y%m%d%H%i%s')
结果: 20160501010101
2)字符串转为日期
STR_TO_DATE(string,format)
参考:http://www.mysqltutorial.org/mysql-str_to_date/
实例:STR_TO_DATE('20160501010101','%Y%m%d%H%i%s')
结果:Date类型的2016-05-01 01:01:01
3.2.日期加减
1)日期相加
DATE_ADD
DATE_ADD(date,INTERVAL expr type)
参考:http://www.w3school.com.cn/sql/func_date_add.asp
实例:DATE_ADD(NOW(),INTERVAL 1 DAY)
结果:当前时间的下一天
2)日期相减
DATE_SUB
DATE_SUB(date,INTERVAL expr type)
参考:http://www.w3school.com.cn/sql/func_date_sub.asp
实例:DATE_SUB(NOW(), INTERVAL 1 DAY)
结果:当前时间的前一天
3.3 日期相差
DATEDIFF
DATEDIFF(date1,date2)
参考:http://www.w3school.com.cn/sql/func_datediff_mysql.asp
实例:DATEDIFF('2016-05-01','2016-04-30')
结果:1