【发布时间】:2021-03-04 22:26:15
【问题描述】:
这些是我的桌子:
我在更新此表后创建触发器:
表格'avisos':
idAvisos | retirado
---------------------
1 | 0
2 | 1
表'recolectores':
idRecolector | num_avisos_retirados
-----------------------------------
1 | 0
2 | 4
所以我想要做的是,在我更新表 avisos 以将“retirado”设置为 true (1) 后,我想将 +1 加到 recolectores 表的“num_avisos_retirados”列。
示例:当 idAvisos (1) 将“retirado”更改为 1 时,idRecolector (1) 必须将 num_avisos_retirados 更改为 1。
这是我到目前为止所做的:
CREATE TRIGGER NumAvisosRecolectados_AU #after update
AFTER UPDATE ON avisos.retirado
IF (NEW.retirado = 1) THEN
UPDATE recolectores
SET recolectores.num_avisos_recolectados = recolectores.num_avisos_recolectados + 1
END IF;
另外,我不明白的是,如果我必须使用 WHERE 子句,才能真正命中“recolectores”表的正确 idRecolector。我的老师给了我们一个类似的例子,但是她没有使用 WHERE 子句来检查正确的 ID。它会自动加入正确的表吗?
当我运行那个 sql 语句时,我得到了这个错误:
'IF (NEW.retirado = 1) THEN 附近的语法错误 更新回忆者 SET recolectore' en la linea 3
更新
阅读后:Fire a trigger after the update of specific columns in MySQL
我现在更改了我的语句,因为我不能在 avisos.retirado 上使用 UPDATE,而是必须使用 FOR EACH ROW 和一个 IF 语句来检查特定列的更改。正如@nbk 所建议的那样,我还添加了一个 WHERE 子句来实际点击我想要更新的正确 id
现在是代码:
DELIMITER //
CREATE TRIGGER NumAvisosRecolectados_AU #after update
AFTER UPDATE ON avisos
FOR EACH ROW
BEGIN
IF (NEW.retirado = 1) THEN
BEGIN
UPDATE recolectores
SET recolectores.num_avisos_recolectados = recolectores.num_avisos_recolectados + 1
WHERE reservas.FK_IDavisos = avisos.ID_avisos
AND reservas.FK_IDrecolector = recolectores.ID_recolector
END
END IF;
END; //
DELIMITER ;
但我仍然遇到语法错误:
#1064 - 'END 附近的语法错误 如果结束;
【问题讨论】:
-
您本可以在不到一半的时间内完成测试...
-
@jarlh 我忘了添加错误,我已经测试过了。 “'IF (NEW.retirado = 1) THEN UPDATE recolectores SET recolectores' en la linea 3 附近的语法错误”