如何创建带条件的有效 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
使用此语法创建触发器并尝试下一个方面。
我坚持创建 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
使用此语法创建触发器并尝试下一个方面。