【问题标题】:Create event in mysql with a query?使用查询在 mysql 中创建事件?
【发布时间】:2020-02-06 04:41:56
【问题描述】:

我想在 mysql 中创建一个事件,但想添加我在描述中输入的总和和累积查询

这是事件代码,但我不知道该怎么做:

CREATE EVENT `recurring data` 
  ON SCHEDULE AT CURRENT_TIMESTAMP + INTERVAL 1 MINUTE
  ON COMPLETION PRESERVE
  DO 
BEGIN
  INSERT INTO ....
END

这是查询:

SET @csum := 0, @product_id:=NULL;
   UPDATE sma_sale_items 
   SET acumulado = (@csum := if(product_id=@product_id,@csum, 00000.0000) + quantity), product_id=(@product_id:=product_id) 
   ORDER BY product_id, id, sale_id;

更新

我尝试创建这个事件,但它不起作用,它告诉我一个错误

1   CREATE EVENT `recurring data` 
2     ON SCHEDULE 
3     EVERY 1 MINUTE
4     STARTS CURRENT_TIMESTAMP + INTERVAL 1 MINUTE
5   DO 
6     BEGIN
7     SET @csum := 0, @product_id:=NULL;
8     UPDATE sma_sale_items 
9     SET acumulado = (@csum := if(product_id=@product_id,@csum, 00000.0000) + quantity), product_id=(@product_id:=product_id) 
10    ORDER BY product_id, id, sale_id;
11    END

错误代码

#1064 - Something is wrong in its sintax near '' on line 7

【问题讨论】:

  • 你能用文字解释你想要发生什么吗?
  • 我想在 mysql 中创建一个事件,但是添加了我在描述中输入的 sum 和累积查询
  • 事件过程中不允许使用 AFAIR UDV。使用局部变量而不是用户定义的。

标签: mysql sql mysql-5.7 mysql-event


【解决方案1】:
CREATE EVENT `recurring data` 
  ON SCHEDULE 
  -- how often it must be executed
  EVERY 1 MINUTE
  -- when the first execution must be performed
  STARTS CURRENT_TIMESTAMP + INTERVAL 1 MINUTE
DO 
BEGIN
  -- perform the actions
END

测试

CREATE EVENT `recurring data` 
ON SCHEDULE 
EVERY 1 MINUTE
STARTS CURRENT_TIMESTAMP + INTERVAL 1 MINUTE
DO 
    BEGIN
    DECLARE var_csum INTEGER DEFALUT 0;
    DECLARE var_product_id DECIMAL(10,4) DEFAULT NULL;
    UPDATE sma_sale_items 
    SET acumulado = (var_csum := if(product_id=var_product_id,var_csum, 00000.0000) + quantity), 
        product_id = (var_product_id:=product_id) 
    ORDER BY product_id, id, sale_id;
END

【讨论】:

  • in -- 执行我提出的查询?就像我拥有它一样?
  • @KevinGomez 是的,您放置了必须每分钟执行一次的查询,而不是评论。但是您必须了解它们会消耗资源,因此如果这些操作查询很繁重,那么您的服务器性能可能会降低。重要的是要确保操作时间少于 1 分钟,以避免在前一个计划未完成时运行下一个计划。
  • 我尝试创建事件,但它向我发送了一个错误,通过查询 CREATE EVENT recurring data ON SCHEDULE EVERY 1 MINUTE STARTS CURRENT_TIMESTAMP + INTERVAL 1 MINUTE DO BEGIN SET @csum := 0, @product_id:=NULL; UPDATE sma_sale_items SET acumulado = (@csum := if(product_id=@product_id,@csum, 00000.0000) + 数量), product_id=(@product_id:=product_id) ORDER BY product_id, id, sale_id;结束
  • 尝试新的,但我犯了这个错误 #1064 - 第 7 行 '' 附近的 sintax 有问题
  • @KevinGomez 你还记得 DELIMITER 重新分配吗?
猜你喜欢
  • 2019-04-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-17
  • 2013-04-27
  • 2014-10-23
  • 2014-07-28
相关资源
最近更新 更多