如何创建带条件的有效 SQL 触发器?

How to create a valid SQL trigger with condition?

我坚持创建 SQL 触发器,当当前行的 Published 字段变为真时更新 publishingDate。我尝试了多种声明变体,但每次都出现语法错误。谷歌搜索没有给出当前案例的关键。希望,你能帮忙。我的代码如下。我使用的验证器:https://ru.rakko.tools/tools/36/

delimiter !

CREATE TRIGGER `vc`.`Articles_Updated_trigger`
BEFORE UPDATE
ON `Articles` FOR EACH ROW
BEGIN
  IF new.Published = TRUE 
    SET new.PublishingdDate = CURRENT_TIMESTAMP
  END IF;
END !

如果您想获取状态发生变化的所有行,您需要比较旧的和新的以检测变化

delimiter $$

CREATE TRIGGER `vc`.`Articles_Updated_trigger`
BEFORE UPDATE
ON `Articles` FOR EACH ROW
BEGIN
  IF OLD.Published = FALSE AND NEW.Published = TRUE THEN
    SET new.PublishingdDate = CURRENT_TIMESTAMP;
  END IF;
END$$
DELIMITER ;
CREATE [ OR ALTER ] TRIGGER [ schema_name . ]trigger_name   
ON { table | view }   
[ WITH <dml_trigger_option> [ ,...n ] ]  
{ FOR | AFTER | INSTEAD OF }   
{ [ INSERT ] [ , ] [ UPDATE ] [ , ] [ DELETE ] }   
[ WITH APPEND ]  
[ NOT FOR REPLICATION ]   
AS { sql_statement  [ ; ] [ ,...n ] | EXTERNAL NAME <method specifier [ ; ] > }  
  
<dml_trigger_option> ::=  
    [ ENCRYPTION ]  
    [ EXECUTE AS Clause ]  
  
<method_specifier> ::=  
    assembly_name.class_name.method_name

使用此语法创建触发器并尝试下一个方面。