我有以下触发器,在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
中删除。
答案 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;