使用Mysql触发器插入默认值



我在一个Mysql表上创建了一个BEFORE INSERT触发器。我想在mySQL 5.4中创建一个日期字段的默认值行为。这意味着如果在插入时没有为该字段提供值,我想使用来自触发器的值。

CREATE TRIGGER `be_table1` 
BEFORE INSERT ON `table1` FOR EACH ROW SET NEW.`date_joined` = NOW();

目前为止还可以。但是如果我现在像这样向表中插入数据…

INSERT INTO table1 (date_joined, productname) VALUES ('2001-02-10', 'hello world');

插入的不是'2001-02-10',而是当前日期.

就我对BEFORE INSERT触发器的理解而言,它预先填充了字段,应该被插入语句覆盖。我错了吗?

可以修改将值插入到before insert触发器中,而不是预先填充它!

您可以使用coalesce()函数覆盖NEW值只有当它是null:

...
SET NEW.`date_joined` = COALESCE(NEW.`date_joined`, NOW());

最新更新