Tia*_*Tia 2 mysql stored-procedures mysql-event
我在 Mysql Workbench 中有一个每秒更新的天气数据库。它包含温度和风速。这是我的数据库:
CREATE TABLE `test`.`new_table` (
`id` INT(10) NOT NULL,
`date` DATETIME NOT NULL,
`temperature` VARCHAR(25) NOT NULL,
`wind_speed` VARCHAR(25) NOT NULL,
`humidity` VARCHAR(25) NOT NULL,
PRIMARY KEY (`id`))
ENGINE = InnoDB
DEFAULT CHARACTER SET = utf8
COLLATE = utf8_bin;
Run Code Online (Sandbox Code Playgroud)
我想找到每小时的平均温度并将结果插入到一个新表中,如下所示
CREATE TABLE `test`.`table1` (
`idsea_state` INT(10) NOT NULL,
`dateavg` DATETIME NOT NULL,
`avg_temperature` VARCHAR(25) NOT NULL,
PRIMARY KEY (`idsea_state`))
ENGINE = InnoDB
DEFAULT CHARACTER SET = utf8
COLLATE = utf8_bin;
Run Code Online (Sandbox Code Playgroud)
这是我的编码,用于查找平均值并将结果插入新表中
INSERT INTO `table1`
(`dateavg`, `avg_temperature`)
SELECT `date` , avg(`temperature`)
FROM `new_table`
GROUP BY DATE( date ), HOUR( date );
Run Code Online (Sandbox Code Playgroud)
这是我的存储过程代码
USE `test`;
DROP procedure IF EXISTS `new_procedure`;
DELIMITER $$
USE `test`$$
CREATE DEFINER=`root`@`localhost` PROCEDURE `new_procedure`()
BEGIN
INSERT INTO `table1`
(`dateavg`, `avg_temperature`)
SELECT `date` , avg(`temperature`)
FROM `new_table`
GROUP By DATE( date ), HOUR( date );
END$$
DELIMITER ;
Run Code Online (Sandbox Code Playgroud)
问题是我希望这个编码平均每小时自动运行一次,我应该使用存储过程和事件调度程序吗?请帮助我,我不知道如何在 Mysql Workbench 中使用事件调度程序。
在 MySQL 中运行它
SET GLOBAL event_scheduler = ON;
Run Code Online (Sandbox Code Playgroud)
添加此内容,my.cnf以便调度程序在 mysql 重新启动时保持启用状态
[mysqld]
event_scheduler = ON
Run Code Online (Sandbox Code Playgroud)
在下一小时开始事件,使其每小时重复一次,调整WHERE条款
CREATE EVENT hourly_temp_avg
ON SCHEDULE
EVERY HOUR
STARTS DATE(NOW()) + INTERVAL (HOUR(NOW())+1) HOUR
ON COMPLETION PRESERVE
DO
INSERT INTO `table1` (`dateavg`, `avg_temperature`)
SELECT `DATE` , avg(`temperature`)
FROM `new_table`
WHERE `date` >= NOW() - INTERVAL 1 HOUR;
Run Code Online (Sandbox Code Playgroud)
马苏德首先提出了正确的概念。所以,他从我这里得到+1。
| 归档时间: |
|
| 查看次数: |
24718 次 |
| 最近记录: |