15

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

ID    name    meta
0     jack    ok
1     anne    del

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

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

该行应该被更新并且元将是“忙”

但是当我这样做时:

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 返回一个语法错误。有任何想法吗?

4

2 回答 2

24

您忘记添加 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 ;
于 2013-06-28T14:12:49.343 回答
0

你错过了;

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 ;

触发是邪恶的。

触发的另一种方法是添加另一个条件AND

UPDATE employees 
SET    meta = 'busy' 
WHERE  ID = 1 AND meta <> 'del'
于 2013-02-08T14:01:37.567 回答