我正在尝试设置一个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 |
+------------+-------------+------+-----+-------------------+-----------------------------+
和
mysql> explain users_details;
+-------+-------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+----------------+
| id | int(11) | NO | PRI | NULL | auto_increment |
| name | varchar(30) | YES | | NULL | |
| age | int(11) | YES | | NULL | |
+-------+-------------+------+-----+---------+----------------+
3 rows in set (0.00 sec)
因此,当从users_details表中删除某些内容时,我设置的触发器将在users表上创建一个NOW的purge_date。这很好。
问题是有时user_details表的数据不正确,然后用户更新它,所以如果他们重新插入数据我需要删除purge_date。现在我已经做了这个触发器
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%罚款我,我会破坏触发失败的东西吗?