15

これで、employees という名前の MySQL テーブルができました。

ID    name    meta
0     jack    ok
1     anne    del

meta='del' の行が meta フィールドを更新するのを防ぐトリガーを書きたいと思います。だから、もしそうなら:

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 に答える