我在理解sql中的函数和触发器时遇到了一些麻烦。我没有发布过程chkInsertAritcle的代码,但可以说如果成功进行更改,它将返回NEW;否则,则返回NULL。
所以我的问题是关于触发器的。如果我把AFTER INSERT放进去,是否意味着它将完成INSERT,而不依赖于返回值?还有什么 其余的行发生了什么?
下一个问题是,如果我在插入之前,代码以什么顺序运行?
谢谢!
CREATE TRIGGER ArticleIns
AFTER INSERT ON ListOfArticles
FOR EACH ROW
EXECUTE PROCEDURE chkInsertArticle();
答案 0 :(得分:2)
首先所有BEFORE
触发器均按字母顺序运行,然后执行该操作,然后所有AFTER
触发器均按字母顺序运行。
每个操作都将前一个的结果视为输入,并且如果任何触发器返回NULL,则对该行的处理将停止。因此,如果BEFORE
触发器返回NULL,则DML操作将不会发生。
对于受触发DML语句影响的每一行,这都是独立发生的。
答案 1 :(得分:1)
因此,如果触发器在插入之前运行,则代码在数据插入行之前运行,并检查约束。因此,例如,您可能想在将数据提交到数据库之前添加时间戳,
如果在此之后运行,则该数据已存在于表中,并且已检查所有约束。通常这是您要基于行数据触发另一个过程,也许更新另一个表,发送电子邮件等的地方。
在您的示例中,数据将在过程运行之前存储在数据库中。因此,如果您的过程修改了行数据,则它必须位于数据库中。