MySQL 事件变量 - 将值复制到另一个表

标签 mysql sql

DELIMITER |

CREATE EVENT myevent
    ON SCHEDULE AT CURRENT_TIMESTAMP + INTERVAL 1 MINUTE
    DO
      BEGIN
        DELETE FROM vehicle WHERE last_updated < (NOW() - INTERVAL 5 MINUTE)
      END |

DELIMITER ;

上面我有一个 MySQL 事件,该事件每分钟运行一次,删除 5 分钟内未更新的行。我有另一个表,名为saved_vehicles。 vehicle 中的所有行saved_vehicle 中将有一行 table 。我想做的本质上是复制 last_updated时间到saved_vehicle表(出于示例目的,假设 saved_vehicle 字段为 last_known_online_time 。这实际上保存了车辆的副本及其最后已知的在线时间。

本质上,我是在删除行之前创建备份。

最佳答案

删除前插入saved_vehicles。 试试这个:

DELIMITER |

CREATE EVENT myevent
    ON SCHEDULE AT CURRENT_TIMESTAMP + INTERVAL 1 MINUTE
    DO
      BEGIN
        SET @time = NOW() - INTERVAL 5 MINUTE;

            # select * is not very smart, it will also copy your primary key, 
            # so you can get error about duplicates. Listing fields would work here.
        INSERT INTO saved_vehicle (SELECT * FROM vehicle WHERE last_updated < @time); 
        DELETE FROM vehicle WHERE last_updated < @time;

      END |

DELIMITER ;

为了避免列出我在评论中提到的字段,请尝试选择除主键列之外的所有字段。 要执行此检查 how to select all columns except one

更新
我通过上面提到的插入 - 如果您的 saved_vehicle 表与 vehicle 表具有相同的结构,但其主键的名称与 vehicle 不同(例如 base_id,当 vehicle PK 为 id 时)及其 int auto_increment 那么它将正常工作.

关于MySQL 事件变量 - 将值复制到另一个表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21099062/

相关文章:

mysql - 使用内连接优化 MySQL 查询

PHP MySQL 分页问题——附加页面显示所有行

单击链接时 PHP 执行文件两次

mysql - 自动递增id 0

python - 检查列表中的任何元素是否与 MySQL 表中的行匹配

php - 我如何在同一页面上有超过 1 个 MySQL UPDATE 查询?

带有行号的 SQL Unpivot

sql - DB2 触发器语法之前

mysql - MySQL 中的条件选择

mysql - 如何使用 Node 的 Sequelize 更新记录?