存储过程:一组完成特定功能的sql语句集,经编译后存储在数据库中,用户通过指定存储过程的名字并给定参数来调用执行
begin
***一系列特定功能的sql语句,一条sql语句记得以分号结束***
end
问题:
1. declare 声明varchar变量时一直语法问题报错,原因是mysql ;(分号问题),借助delimiter解决问题。默认情况下,delimiter是分号;。在命令行客户端中,如何有一行命令以分号结束,则回车后,mysql会执行该命令。但有时候,不希望mysql这么做。在为可能输入较多的语句中,且语句中也包含分号情况,此时不让mysql自动执行,就需要借助delimiter将分号换成其他符合,如// 或 $$。只有当// 或 $$出现之后,mysql解释器才会执行这段语句。
实际例子:
比较时间戳,删除30天前数据
创建存储过程:
delimiter //
CREATE PROCEDURE del_mydatatable_crontab()
BEGIN
DECLARE date_string varchar(100);
DECLARE date_string2 varchar(100);
DECLARE date_string3 varchar(100);
SELECT DATE_SUB(CURDATE(), INTERVAL 30 DAY) INTO date_string;
SELECT CONCAT(date_string," 00:00:00") INTO date_string2;
SELECT UNIX_TIMESTAMP(DATE(date_string2)) INTO date_string3;
DELETE FROM `MYDATATABLE` WHERE `timestamp` < date_string3;
END
//
执行存储过程:call del_mydatatable_crontab();
查看数据库已有的存储过程:show procedure status;
某些参考提取:
http://www.cnblogs.com/cxxjohnson/p/5965194.html
http://blog.sina.com.cn/s/blog_52d20fbf0100ofd5.html
http://blog.csdn.net/huihuangjiuai/article/details/37881123