2015-08-19 188 views
1

更新規則我有一個MySQL表:強制執行

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

在我的應用程序,我想執行這個名字列不能被更新的規則,如果當前日期和時間是過去的datecolumn字段的值。目前,我正在查詢數據庫中每行的值,然後更新(如果當前日期/時間在之前)。

我想知道如何執行此操作,而無需在更新之前額外調用數據庫。我在應用程序中每次更新許多不同的行,並且認爲由於所有額外的查詢,導致性能問題。

+0

如果什麼不能更新?主鍵? – Drew

+0

@拖出整行無法更新。 – ncf

+0

整行包括PK? – Drew

回答

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 ; 
+0

不錯,這正是我一直在尋找的。 – ncf