mysql - 如何在 MySQL 中创建触发器并在条件下运行

标签 mysql sql database-trigger

我有两个如下所述的表,我想创建一个触发器来更新我的 monitor 表,当相关帖子的 post_status = 'draft' .但是我有两个问题:

我创建了一个查询(也在下方),但我似乎在第 5 行(更新命令所在的位置)返回错误。

第二个问题是如果在我的monitor表中找不到对应的post_id,MySQL将如何处理。

表格:

posts
- id
- name
- post_status

monitor
- id
- post_id
- last_checked

MySQL触发器

CREATE TRIGGER update_tracker AFTER UPDATE ON posts
FOR EACH ROW
BEGIN
IF NEW.post_status = 'draft' THEN
    UPDATE monitor SET last_checked = NOW() WHERE post_id = UPDATE.id;
END IF;
END;

SQL Fiddle

最佳答案

不清楚你的意图UPDATE.id引用,但我猜你的意思是NEW.id ,这是生成此触发器的行的 id 列。

生成当前触发器的行的所有列都用 NEW.<column> 引用语法。

如果您的 UPDATE 不匹配 monitor 中的任何行表,它没有影响。就像您运行了条件匹配零行的 UPDATE 一样。

关于mysql - 如何在 MySQL 中创建触发器并在条件下运行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47141086/

相关文章:

sql - 如何选择特定日期的行,忽略 SQL Server 中的时间

mysql - 下一次发生时间 SQL

sql-server - 删除触发器时出错

javascript - 计算 Firebase Cloud Functions 中的子级数

MySQL 错误 1215 : Cannot add foreign key constraint

python - 使用 eclipse 运行 Python Django migrate 时出现 Mysql 错误

mysql - 尝试通过使用多个表作为过滤器,在 Perl 中使用 sqlite 从数据库中提取数据

mysql - 快速字符串匹配 MySQL 查询

sql - 如何查找键重复但所有列中不重复的行?

postgresql - 如何在触发器过程中使用动态 sql 设置复合类型列