我希望触发器能够确定是否在update语句中为字段实际分配了值,以便如果没有,则可以分配值。
我看了下面的文章,它谈论的是同一件事,但没有说明是否有确定值是否传递给Update语句的方法。
What are the values of columns which are not set in a BEFORE UPDATE trigger?
这是一个例子。我有一张桌子:
CREATE TABLE Business (
BusinessId INT NOT NULL AUTO_INCREMENT,
Name VARCHAR(40) NOT NULL,
IsActive TINYINT UNSIGNED DEFAULT NULL,
UpdateUser VARCHAR(66) DEFAULT NULL,
UpdateDate DATETIME(3) DEFAULT NULL,
PRIMARY KEY (BusinessId)
);$$
我在该表上有一个更新前触发器。
如果未在Update语句上指定UpdateUser和UpdateDate,那么我想将触发器中的这些值设置为USER()和NOW()。
“业务”表中的记录3如下:
BusinessId = 3
Name = 'Geronimo'
IsActive = 1
UpdateUser = 'Susie'
UpdateDate = '2019-04-30 09:14'
这是我的更新声明: 更新业务集名称=“测试”,其中BusinessId = 3;
在我的触发器内,NEW.UpdateUser ='Susie'和OLD.UpdateUser ='Susie'。 同样,NEW.UpdateDate ='2019-04-30 09:14'和OLD.UpdateDate ='2019-04-30 09:14'。
因此,如果在Update语句中未指定UpdateUser时NEW.UpdateUser始终等于OLD.UpdateUser,我怎么知道是同一用户更新了记录还是该用户未传递到Update语句中? / p>
在我的示例中,这两个更新语句产生相同的触发结果:
Update Business Set Name = 'Test' Where BusinessId = 3;
和
Update Business Set Name = 'Test', UpdateUser='Susie' Where BusinessId = 3;
但是我希望第一条更新语句将UpdateUser设置为USER()。第二条更新语句将UpdateUser设置为“ Susie”。
这对于SQL Server来说没有问题,但是在MySQL中,我还没有找到一种方法。...