插入删除查询后,MySQL触发器无效

时间:2015-06-22 23:08:59

标签: mysql sql triggers insert

我有以下触发器,在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()的数据,添加到{ {1}}然后从tb_realizacao中删除此旧数据。问题是删除查询似乎没有执行,数据通常会添加到tb_agenda但不会从tb_realizacao中删除。

1 个答案:

答案 0 :(得分:1)

无需设置WHERE,因为NOW意味着将删除所有这些内容。因为每个触发器都有FOR EACH ROW,所以不需要WHILE。您无法从插入的表中删除,因此删除将在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;