【问题标题】:MySql Event to Delete Data from 2 Tables Older Than 2 MonthsMySql 事件从 2 个超过 2 个月的表中删除数据
【发布时间】:2020-09-05 13:50:54
【问题描述】:

我是 MySql 事件的新手,我以前从未使用过它们,所以请多多包涵。 在我的数据库中,我有 order_detailsinvoices 表,我需要创建一个 Event 来删除所有早于 2 个月的记录 和 where order_details status = 5invoices status = 3 我希望该活动每天凌晨 3 点进行删除 我可以如何做到这一点 任何帮助将不胜感激

更新:

两个表都有名为 created_at

的时间戳列

表定义

A - order_dateils

  • 身份证
  • order_bar
  • 说明
  • 状态
  • created_at

B - 发票

  • 身份证
  • invoice_id
  • 状态
  • created_at

【问题讨论】:

  • 您对这里的 2 个问题(删除和创建事件)中的哪个问题有疑问。 AND where order_details status = 5 and invoices status = 3 不清楚,您如何将订单链接到发票也不清楚(如果这是有意的话)。
  • @P.Salmon 实际上,我看到了许多使用事件从 1 个表中删除的示例,在我的情况下,我有两个表都有时间戳列 created_at 并且 order_details 状态必须为 =5 和发票状态必须为 = 3,所以我的问题是可能
  • 请为 order_details 和 invoices 添加表定义
  • 这能回答你的问题吗? How to delete from multiple tables in MySQL?
  • @P.Salmon 不,我的朋友,我知道如何从表中删除我正在寻找的是每天凌晨 3 点删除的事件

标签: mysql mysql-event


【解决方案1】:
    CREATE EVENT delete_every_day
        ON SCHEDULE
          EVERY 1 DAY STARTS DATE_ADD(CURDATE(), INTERVAL'1 3' DAY_HOUR)
        -- Will delete every day record from invoices with status = 3 and more than 2 
        -- month old, and the order_details with status = 5 and more than 2 month old
        -- It will start deleting next day at 3:00 AM.
        DO
          BEGIN
            DELETE FROM your_schema.invoices
                 WHERE TIMESTAMPDIFF(MONTH,created_at, NOW()) > 2
                 AND status = 3;
            DELETE FROM your_schema.order_details
                 WHERE TIMESTAMPDIFF(MONTH,created_at, NOW()) > 2
                 AND status = 5;
          END 

我希望这可以回答您的问题。确保在表名中包含架构(数据库名称),例如 [schema_name.table_name],以确保事件与正确的表相关联。祝你好运。

【讨论】:

  • 感谢您的回答,但在尝试之前,TIMESTAMPDIFF 不是缺少月份(单位)吗?
  • @Ali Adil,你是 100% 正确的。我的错。一定有像“TIMESTAMPDIFF(MONTH, created_at, NOW())。对不起。我只是编辑它!
  • 您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,以获取在 ''1 3' DAY_HOUR) 附近使用的正确语法 DO BEGIN DELETE FROM forval_DB.invoice WHERE TIMESTAMPDIFF(MONTH' at line 1
  • 我无法识别代码中的任何 SQL 语法错误。如果你这样做,我会很感激你指出来。
  • 错误出现在 DATE_ADD 函数中,缺少 INTERVAL 子句。现在修好了!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-03-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-07-28
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多