gpt4 book ai didi

MySQL 触发器需要调整

转载 作者:行者123 更新时间:2023-11-29 14:45:53 25 4
gpt4 key购买 nike

我有一个触发器,当插入新行时,它会在表行中设置日期时间字段。 (不用费心告诉我我可以在表定义中执行此操作,我有第二个日期时间字段已经使用该功能,并且您只能在每个表中使用一列来执行此操作。)

这个触发器非常适合我的目的:

CREATE TRIGGER foobar_insert
BEFORE INSERT ON foobar
FOR EACH ROW SET NEW.created=NOW();

因此,每当插入新行时,foobar.created 就会设置为当前时间。当我做这样的事情时,这很棒:

INSERT INTO foobar (foo) VALUES ('bar');

唯一的问题是,如果我想在插入语句中显式设置 foobar.created ,它会被触发器覆盖。

所以,

INSERT INTO foobar (foo,created) VALUES ('foo','2006-01-01 12:12:12');

导致 foobar.created 等于插入时间,而不是插入语句中指定的时间。

所以我的问题是:如果触发器还没有值,如何将其更改为仅设置 foobar.created

编辑:

为了回应下面的 james_bond,以下是有效的:

DELIMITER $$
DROP TRIGGER IF EXISTS foobar_insert$$
CREATE TRIGGER foobar_insert
BEFORE INSERT ON foobar
FOR EACH ROW
IF NEW.created IS NULL THEN
SET NEW.created=NOW();
END IF$$
DELIMITER ;

注意,我必须包含 DELIMITER 语句,因为 IF 语句需要内部分号。

最佳答案

测试NEW.created是否为NULL,如果设置了,那是因为你在插入语句中设置了它,如果它是NULL,那么它需要当前时间作为值,这样的东西就可以解决问题:

if NEW.created is NULL THEN
SET NEW.created = now();
end if

关于MySQL 触发器需要调整,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6969628/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com