【问题标题】:MySQL trigger after insert delete query not working插入删除查询后MySQL触发器不起作用
【发布时间】:2015-06-22 23:08:59
【问题描述】:

我有以下触发器,在 phpMyAdmin 中创建:

Table: tb_agenda Time: AFTER Event: INSERT

BEGIN
    DECLARE x INT DEFAULT 0;
    DECLARE i INT DEFAULT 0;

    SELECT COUNT(*) FROM tb_agenda INTO x;

    SET i = 0;

    WHILE i < x DO
        INSERT INTO tb_realizacao (dt_agenda,
                                   titulo, 
                                   titulo_en, 
                                   descricao, 
                                   descricao_en, 
                                   dt_cadastro)
        SELECT  dt_agenda,
                titulo,
                titulo_en,
                descricao,
                descricao_en,
                dt_cadastro
        FROM tb_agenda
        WHERE dt_agenda < NOW();

        DELETE FROM tb_agenda
         WHERE dt_agenda < NOW();

        SET i = i + 1;
    END WHILE;
END

这是什么:插入tb_agenda后,它应该搜索dt_agenda(日期)低于NOW()的数据,添加到tb_realizacao,然后从tb_agenda中删除这个旧数据。问题是删除查询似乎没有执行,数据正常添加到tb_realizacao但没有从tb_agenda删除。

【问题讨论】:

  • 你为什么不直接使用new 来访问正在插入的记录?此外,您的循环什么也不做。 . .循环遍历表中的所有记录似乎很奇怪。
  • 我需要删除旧数据。例如,如果我在 2016 年 6 月 22 日安排一个活动,在 2016 年 6 月 23 日,如果我插入一个新活动,则应该删除 2016 年 6 月 22 日的活动。

标签: mysql sql triggers insert


【解决方案1】:

无需设置 WHERE,因为 NOW 意味着所有这些都将被删除。不需要 WHILE,因为每个触发器都有 FOR EACH ROW。您无法从插入的表中删除,因此删除将在 php 脚本中。

php 脚本:

$pdo->query("DELETE FROM tb_agenda");
$pdo->query("INSERT ...");

触发: 表:tb_agenda 时间:之前 事件:删除

BEGIN
    INSERT INTO tb_realizacao (dt_agenda,
                               titulo, 
                               titulo_en, 
                               descricao, 
                               descricao_en, 
                               dt_cadastro)
    VALUES  (OLD.dt_agenda,
            OLD.titulo,
            OLD.titulo_en,
            OLD.descricao,
            OLD.descricao_en,
            OLD.dt_cadastro);

END;

【讨论】:

    猜你喜欢
    • 2013-02-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-20
    • 1970-01-01
    相关资源
    最近更新 更多