未找到匹配项时触发mysql

未找到匹配项时触发mysql,mysql,triggers,Mysql,Triggers,我正在尝试设置mysql触发器。假设桌子是这样的 mysql> explain users; +------------+-------------+------+-----+-------------------+-----------------------------+ | Field | Type | Null | Key | Default | Extra | +------------+--

我正在尝试设置mysql触发器。假设桌子是这样的

mysql> explain users;
+------------+-------------+------+-----+-------------------+-----------------------------+
| Field      | Type        | Null | Key | Default           | Extra                       |
+------------+-------------+------+-----+-------------------+-----------------------------+
| id         | int(11)     | NO   | PRI | NULL              | auto_increment              |
| name       | varchar(30) | YES  |     | NULL              |                             |
| age        | int(11)     | YES  |     | NULL              |                             |
| purge_date | timestamp   | NO   |     | CURRENT_TIMESTAMP | on update CURRENT_TIMESTAMP |
+------------+-------------+------+-----+-------------------+-----------------------------+

因此,当从users\u details表中删除某些内容时,我设置的触发器将在users表中创建一个purge\u date of NOW。这很好

问题是,有时users_details表的数据传递不正确,然后用户更新它,因此如果他们重新插入数据,我需要删除清除日期。现在我已经触发了

CREATE TRIGGER purge_fix AFTER INSERT ON users_details
FOR EACH ROW
BEGIN
    UPDATE users
        SET purge_date= '0000-00-00 00:00:00'
        WHERE users.name = NEW.name;
END;

这很好,但在某些情况下,users_details表和users表之间没有链接(将在稍后阶段创建),因此我的问题是,由于触发器在某些情况下会失败(我认为这是100%好),如果触发器失败,我是否会中断某些内容?

如果触发器中的更新未发现与where子句匹配的行,它将继续执行而不会出现任何错误,并且不会更新任何内容。如果在这种情况下触发器预计会失败,则需要在触发器代码中手动发出错误信号,但在这种情况下,整个事务也会失败,插入也会失败;如果你在调试某些东西,开发人员和DBA可能会感到困惑,有朝一日有人可能会对你的工作做出评判。@kordirko因此,如果触发器设置为“插入后”,如果where子句中没有匹配项,插入本身仍然会失败?@Leo好的,我想你是对的。扳机正是我想要完成的事情的好地方。我想我得找别的地方来完成这件事。谢谢你的建议。不,触发器不会失败,请看这个例子,它工作得非常好:
CREATE TRIGGER purge_fix AFTER INSERT ON users_details
FOR EACH ROW
BEGIN
    UPDATE users
        SET purge_date= '0000-00-00 00:00:00'
        WHERE users.name = NEW.name;
END;