在行中强制执行更新规则

时间:2015-08-19 02:30:55

标签: mysql sql

我有一个mysql表:

`id` - int (primary key)
`datecolumn` - datetime
`name` - varchar

在我的应用程序中,我想强制执行一条规则,即如果当前日期和时间超过datecolumn字段的值,则无法更新名称列。目前,我正在查询数据库中每行的值,然后更新当前日期/时间是否在之前。

我想知道在更新之前如何在没有额外调用数据库的情况下强制执行此操作。我在应用程序中一次更新许多不同的行,并认为由于所有额外的查询而导致性能问题。

1 个答案:

答案 0 :(得分:1)

您可以使用触发器强制执行此类规则。

在您的情况下,您需要before update触发器。像这样:

delimiter $$

create trigger noupdates before update on t
    for each row
begin
    if new.datecolumn > now() then
        signal sqlstate '45000' 
            set message_text := 'Too late to update row';
    end if;
end;
$$
delimiter ;