我有一个存储过程,它基本上从一个表中选择数据并插入到另一个表中。基本上我是手动进行数据归档。现在,我想像讨论的那样写一个事件 here
但是,在阅读该帖子并进行在线研究之后,我了解到无法在存储过程中创建事件。有没有办法在 MySQLWorkbench 中实现我的目标?
最佳答案
我相信您的想法是相反的:您不能在存储过程中创建事件,但您可以创建存储过程并从事件中调用它。
示例:
delimiter $$
create procedure myProc()
-- Dummy procedure to move the data from mainTable to backupTable,
-- and then clear (truncate) mainTable
begin
insert into backupTable select * from mainTable;
truncate mainTable;
end $$
delimiter ;
-- Now, suposing that you want to execute this procedure every hour:
delimiter $$
create event myEvent
on schedule every 1 hour
do
begin
call myProc();
end $$
delimiter ;
您可以在工作台中将其编写为任何其他查询,或直接在命令行客户端中编写。
关于您的担忧
看完您的评论,我相信您对什么是 MySQL Workbench 有点困惑。
MySQL Workbench 只是一个图形应用程序,允许您连接到 MySQL 服务器并执行查询和管理任务。但是 Workbench 不是 MySQL 的核心...它只是一个查看器(也许有类固醇,但毕竟是一个查看器)。
现在,事件调度程序不驻留在 Workbench 中,而是驻留在您正在连接的 MySQL 服务器实例中。正如表、 View 、过程和函数不存储在 Workbench 界面中而是存储在服务器中一样,事件也存储在服务器中。
(是的,我认为这是一个相关的 SNAFU,计划的事件没有在图形界面的任何地方显示,但是......过了一段时间,人们学会了忍受那种挫折并继续生活)
也许您唯一关心的是:“嘿,如果我想知道在事件调度程序中设置了哪些事件运行怎么办?”您可以执行“show events”查询来显示当前数据库中的事件列表,也可以执行“show create event yourEvent”来显示 create event
。该事件的语法。
我坚持:阅读手册,并在手边保留一份副本(下载适用于您的 MySQL 版本的手册 here)。
关于mysql - 在 MySQL 中处理事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24542475/