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