mysql - 在 MySQL 中处理事件

标签 mysql database mysql-workbench

我有一个存储过程,它基本上从一个表中选择数据并插入到另一个表中。基本上我是手动进行数据归档。现在,我想像讨论的那样写一个事件 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/

相关文章:

mysql - MySQL 作业警报

mysql - MySQL Workbench 中的正向工程 EER 图

MySQL - 错误代码 : 1070. 指定的关键部分太多;

mysql - 在 SQL 中插入一行并在存储过程中设置变量?

mysql - 通过匹配另一个表中主键以外的列来更新外键

php - 数据库未出现在 MYSQL 控制台中

mysql - Sql 连接三表

database - 显示数据库语句是 DDL、DML 还是其他?

mysql - 从字段 mysql 更新部分字符串

Python MySQLdb 转换列表数据以从 SELECT 输出 CSV