mysql怎么执行一个存储过程

作者&投稿:邓夜 (若有异议请与网页底部的电邮联系)
mysql怎么让一个存储过程定时执行~

mysql怎么让一个存储过程定时执行
查看event是否开启: show variables like '%sche%';
将事件计划开启: set global event_scheduler=1;
关闭事件任务: alter event e_test ON COMPLETION PRESERVE DISABLE;
开户事件任务: alter event e_test ON COMPLETION PRESERVE ENABLE;

简单实例.
创建表 CREATE TABLE test(endtime DATETIME);

创建存储过程test
CREATE PROCEDURE test ()
BEGIN
update examinfo SET endtime = now() WHERE id = 14;
END;

创建event e_test
CREATE EVENT if not exists e_test
on schedule every 30 second
on completion preserve
do call test();

每隔30秒将执行存储过程test,将当前时间更新到examinfo表中id=14的记录的endtime字段中去




1) 首先来看一个简单的例子来演示每秒插入一条记录到数据表

USE test;
CREATE TABLE aaa (timeline TIMESTAMP);
CREATE EVENT e_test_insert
ON SCHEDULE EVERY 1 SECOND
DO INSERT INTO test.aaa VALUES (CURRENT_TIMESTAMP);
等待3秒钟后,再执行查询看看:

mysql> SELECT * FROM aaa;
+---------------------+
| timeline |
+---------------------+
| 2007-07-18 20:44:26 |
| 2007-07-18 20:44:27 |
| 2007-07-18 20:44:28 |
+---------------------+
2) 5天后清空test表:

CREATE EVENT e_test
ON SCHEDULE AT CURRENT_TIMESTAMP + INTERVAL 5 DAY
DO TRUNCATE TABLE test.aaa;
3) 2007年7月20日12点整清空test表:

CREATE EVENT e_test
ON SCHEDULE AT TIMESTAMP '2007-07-20 12:00:00'
DO TRUNCATE TABLE test.aaa;
4) 每天定时清空test表:

CREATE EVENT e_test
ON SCHEDULE EVERY 1 DAY
DO TRUNCATE TABLE test.aaa;
5) 5天后开启每天定时清空test表:

CREATE EVENT e_test
ON SCHEDULE EVERY 1 DAY
STARTS CURRENT_TIMESTAMP + INTERVAL 5 DAY
DO TRUNCATE TABLE test.aaa;
6) 每天定时清空test表,5天后停止执行:

CREATE EVENT e_test
ON SCHEDULE EVERY 1 DAY
ENDS CURRENT_TIMESTAMP + INTERVAL 5 DAY
DO TRUNCATE TABLE test.aaa;
7) 5天后开启每天定时清空test表,一个月后停止执行:

CREATE EVENT e_test
ON SCHEDULE EVERY 1 DAY
STARTS CURRENT_TIMESTAMP + INTERVAL 5 DAY
ENDS CURRENT_TIMESTAMP + INTERVAL 1 MONTH
DO TRUNCATE TABLE test.aaa;
[ON COMPLETION [NOT] PRESERVE]可以设置这个事件是执行一次还是持久执行,默认为NOT PRESERVE。
8) 每天定时清空test表(只执行一次,任务完成后就终止该事件):

CREATE EVENT e_test
ON SCHEDULE EVERY 1 DAY
ON COMPLETION NOT PRESERVE
DO TRUNCATE TABLE test.aaa;
[ENABLE | DISABLE]可是设置该事件创建后状态是否开启或关闭,默认为ENABLE。
[COMMENT ‘comment’]可以给该事件加上注释。

三、修改事件(ALTER EVENT)
ALTER EVENT event_name
[ON SCHEDULE schedule]
[RENAME TO new_event_name]
[ON COMPLETION [NOT] PRESERVE]
[COMMENT 'comment']
[ENABLE | DISABLE]
[DO sql_statement]
1) 临时关闭事件

ALTER EVENT e_test DISABLE;
2) 开启事件

ALTER EVENT e_test ENABLE;
3) 将每天清空test表改为5天清空一次:

ALTER EVENT e_test
ON SCHEDULE EVERY 5 DAY;
四、删除事件(DROP EVENT)
语 法很简单,如下所示:

DROP EVENT [IF EXISTS] event_name
例如删除前面创建的e_test事件

DROP EVENT e_test;
当然前提是这个事件存在,否则会产生ERROR 1513 (HY000): Unknown event错误,因此最好加上IF EXISTS

DROP EVENT IF EXISTS e_test;

create event test
ON SCHEDULE AT '2007-09-01 12:00:00' + INTERVAL 1 DAY
on completion not preserve
do insert into yyy values('hhh','uuu');

解释:从2007-09-01开始,每天对表yyy在12:00:00进行一个插入操作。而且只执行一次(on completion not preserve )

我的计划任务为:

create event sysplan
ON SCHEDULE AT '2010-05-22 23:00:00' + INTERVAL 1 DAY
on completion not preserve
do truncate table bjproj.ae_tmp;



三、通过设定全局变量event_scheduler 的值即可动态的控制事件调度器是否启用。
查看是否event_scheduler开启mysql> SHOW VARIABLES LIKE '%event%';
设置开启mysql> SET GLOBAL event_scheduler=ON;
四、例子:
每分钟插入一条日志:DELIMITER //CREATE EVENT `user_log_event` ON SCHEDULE EVERY 1 MINUTE STARTS '2010-12-27 00:00:00' ON COMPLETION NOT PRESERVE ENABLE DO BEGIN INSERT INTO log SET addtime=NOW();END//
调用存储过程:DELIMITER //CREATE EVENT `user_log_event` ON SCHEDULE EVERY 1 DAY STARTS '2010-00-00 00:00:00' ON COMPLETION NOT PRESERVE ENABLE DO BEGIN CALL user_log_prov();END//

不好意思,
存储过程
里不能执行
脚本文件
你能通过其他方式解决,将脚本写成存储过程在存储过程中调用,或者在存储过程中生成语句通过EXECUTE执行

给你个例子
drop procedure if exists call proc_temp;
delimiter $ //存储过程从$ 开始
create procedure proc_temp(
IN startDate VARCHAR(20),//设置传入的变量,没有可以不要传
IN endDate VARCHAR(20))
BEGIN
DECLARE dflag INT(11); //这里可以定义你需要的仅在存储过程里使用的变量
SET dflag = 0;//初始化
select * from table where time between startDate and endDate ;//你的sql语句,可以一句可以多句
END $//存储过程从$ 结束
delimiter ;
当上面的选中运行后没问题,可以选中下面的call xx 运行,上面的代码没有改动的话只需要运行一次
call proc_temp("2017-07-05","2017-08-05")

MySQL教程4 MySQL8运算符、函数、存储过程及新增数据类型 17.之创建带有IN和OUT参数的存储过程 学习猿地




mysql如何启动
本文将给大家介绍,在Windows和Linux 系统上怎么启动或停止MySQL服务。推荐学习参考:《mysql教程》一、Windows mysql 启动1.在桌面找到计算机图标,鼠标右键,打开管理工具->服务,如下图。2.在服务窗口中,找到并选择MySQL服务。如果MySQL服务正在运行,在旁边你会将看到以下3个选项。停止服务:此选项将...

MySQL中如何执行SQL语句?
wow单机版一般还需要你安装MySQL的管理工具的,例如navicat之类,里面就有时间查看器啊之类的东西了,用那个就可以执行了。还是去弄一个一键的安装版吧。那个SQL脚本太多了,一个个打你要整死的。好了分给我吧。

求PHP写法,用来执行一个MYSQL语句
<?php con = mysql_connect("数据库地址","数据库账号","数据库库密码");if (!$con){ die('Could not connect: ' . mysql_error());} time = time();con->query(select * from a where pubdate < $time);?>

mysql怎么让一个存储过程定时执行
mysql怎么让一个存储过程定时执行 查看event是否开启: show variables like '%sche%';将事件计划开启: set global event_scheduler=1;关闭事件任务: alter event e_test ON COMPLETION PRESERVE DISABLE;开户事件任务: alter event e_test ON COMPLETION PRESERVE ENABLE;简单实例.创建表 CREATE TABLE ...

进入mysql控制台后执行sql脚本的方法
使用source命令执行sql脚本。进入mysql的控制台后,使用source命令执行 Mysql>source 【sql脚本文件的路径全名】具体步骤:假设运行sql脚本是hello.sql,在控制台下输入:mysql>source c:\\hello world\\hello.sql(注意路径不用加引号) 或者 \\. c:\\hello world\\hello.sql 然后回车即可 ...

mysql中,怎么一条条执行某个表中已经存好的语句
你要知道,只能有sql语句取出来才能执行。所以,你只要这么做:从数据库的表table1中,取出该字段下的sql,如果sql有多行,那么,我们,可以通过字符串分割等,把多条sql分离出来,对每条sql逐一执行。或者,每个sql之间有分号的,直接一起执行多条也是可以的,只要把多条sql当作一条,一起用函数query...

MySQL的执行流程怎么优化?
另外一个提高效率的方法是在可能的情况下,应该尽量把字段设置为NOTNULL,这样在将来执行查询的时候,数据库不用去比较NULL值。 对于某些文本字段,例如“省份”或者“性别”,我们可以将它们定义为ENUM类型。因为在MySQL中,ENUM类型被当作数值型数据来处理,而数值型数据被处理起来的速度要比文本类型快得...

Mysql中如何实现某字段数据自动加1
DROP TABLE IF EXISTS `jk`.`jkrecord`;CREATE TABLE `jk`.`jkrecord` (`user1` varchar(45) NOT NULL,`user2` varchar(45) NOT NULL,`user3` varchar(45) NOT NULL,`day` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',`number` int(10) unsigned NOT NULL AUTO_INCREMENT,PR...

mysql怎么让一个存储过程定时执行
先写好存储过程,比如名字叫sp_mybooks,在写一个event,设置好定时,即可 如下图

mysql下如何执行sql脚本
选择数据库 右击 运行sql文件 就好了 或者直接拖进数据库

甘德县17191464221: mysql怎么执行一个存储过程 -
藩天降脂: 给你个例子 drop procedure if exists call proc_temp; delimiter $ //存储过程从$ 开始 create procedure proc_temp( IN startDate VARCHAR(20),//设置传入的变量,没有可以不要传 IN endDate VARCHAR(20)) BEGIN DECLARE dflag INT(11); //这...

甘德县17191464221: mysql执行存储过程语句怎么写 -
藩天降脂: mysql用call命令执行存储过程,例如 call user_add();上面的sql就执行了一个名字叫user_add的存储过程

甘德县17191464221: 如何执行mysql中的存储过程 -
藩天降脂: 这个实现得追查一下才能解决.实际mysql的存储过程想在sqlserver里面运行本身还是需要处理一下的.OPENQUERY(pidb,'call api_pidb_real(20100)') 函数和函数体内部调用别的函数或者存储过程.都需要进一步确认并且在数据库中创建和执行才能确保你现在这句话能通

甘德县17191464221: mysql执行存储过程语句怎么写 -
藩天降脂: 比方说你创建存储过程的语句如下:create procedure test_proc(count int)那么执行存储过程的语句就是:call test_proc(500);

甘德县17191464221: mysql中的存储过程怎么使用 -
藩天降脂: 存储过程(Stored Procedure)是一组为了完成特定功能的SQL语句集功能是将常用或复杂的工作,预先用SQL语句写好并用一个指定名称存储起来, 以后需要数据库提供与已定义好的存储过程的功能相同的服务时,只需调用 call 存储过程名字, 即可自动完成命令.存储过程是由流控制和SQL语句书写的过程,这个过程经编译和优化后存储在数据库服务器中,可由应用程序通过一个调用来执行,而且允许用户声明变量 .同时,存储过程可以接收和输出参数、返回执行存储过程的状态值,也可以嵌套调用.

甘德县17191464221: 如何在mysql数据库中建立一个存储过程? -
藩天降脂: create procedure Pro_orders @usersName varchar(40),@ordersPrice varchar(40), @ordersDatetime varchar(40),@ordersId int output as begin begin transaction insert orders values (@usersName,@ordersPrice,@ordersDatetime) select @ordersId=max(ordersId) from orders commit transaction end

甘德县17191464221: mysql怎么创建存储过程 -
藩天降脂: 直接create procedure就可以啊 一般语法: CREATE PROCEDURE myproc(OUT s int) BEGIN 存储过程主体; END

甘德县17191464221: 存储过程怎么在mysql查询里执行 -
藩天降脂: 可以用 命令"show procedure status"查看所有的存储过程或检索系统表"mysql.proc"来查询已有的存储过程. 例如: 用show procedure status命令查看: -- 查看所有的存储过程 show procedure status; -- 查看特定数据库存储过程 show ...

甘德县17191464221: mysql如何创建存储过程? -
藩天降脂: 1 用mysql客户端登入2 选择数据库mysql>use test3 查询当前数据库有哪些存储过程mysql>show procedure status where Db='test'4 创建一个简单的存储过程mysql>create procedure hi() select 'hello';5 存储过程创建完毕,看怎么调用它mysql>...

甘德县17191464221: mysql存储过程怎么调 -
藩天降脂: mysql调试存储过程具体方法:在你的存储过程中加入如下语句:SELECT 变量1,变量2; 然后用mysql自带的cmd程序进入mysql> 下.call 你的存储过程名(输入参数1,@输出参数);(注:这里帮助下新同学,如果你的存储过程有输出变量,那么在这里只需要加 @ 然后跟任意变量名即可); 即可发现你的变量值被打印到了cmd下

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网