MySQL BEFORE UPDATE触发器 - 更改值

时间:2013-02-08 14:00:14

标签: mysql sql triggers

所以,我有一个名为employees的MySQL表。

ID    name    meta
0     jack    ok
1     anne    del

我想编写一个触发器来阻止meta ='del'的行来更新元字段。 所以,如果我这样做:

UPDATE employees SET meta = 'busy' WHERE ID = 0

该行应该更新,meta将是“忙碌”

但是当我这样做时:

UPDATE employees SET meta = 'busy' WHERE ID = 1

元字段仍应为'del'

我试过了:

delimiter $$
CREATE TRIGGER updateEmployees
BEFORE UPDATE ON employees
FOR EACH ROW 
BEGIN
    IF OLD.meta = 'del' THEN
        NEW.meta = 'del'
    END IF;
END$$
delimiter ;

但MySQL返回语法错误。有什么想法吗?

2 个答案:

答案 0 :(得分:17)

您忘记添加SET子句。这样它实际上不会改变值。

delimiter $$
CREATE TRIGGER updateEmployees
BEFORE UPDATE ON employees
FOR EACH ROW 
BEGIN
    IF OLD.meta = 'del' THEN
        SET NEW.meta = 'del';
    END IF;
END$$
delimiter ;

答案 1 :(得分:2)

<击>

<击>

你错过了;

delimiter $$
CREATE TRIGGER updateEmployees
BEFORE UPDATE ON employees
FOR EACH ROW 
BEGIN
    IF OLD.meta = 'del' THEN
        NEW.meta = 'del';   -- << here
    END IF;
END$$
delimiter ;

<击>

TRIGGER IS EVIL

触发器的替代方法是添加另一个条件AND

UPDATE employees 
SET    meta = 'busy' 
WHERE  ID = 1 AND meta <> 'del'