如何确定是否在“更新前”触发器中的更新语句上传递了列值?

时间:2019-04-30 17:03:55

标签: mysql triggers

我希望触发器能够确定是否在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中,我还没有找到一种方法。...

0 个答案:

没有答案