2013-02-08 1 views
8

Итак, у меня есть таблица MySQL, называемая сотрудниками.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 

Мета поле должно еще быть «дель '

Я пробовал:

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 возвращается с синтаксической ошибкой. Есть идеи?

ответ

3

вы пропустили ;

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

Триггер по-прежнему не работает, но я решил пойти со своим вторым решением. Спасибо! –

+0

добро пожаловать ': D' –

+14

Почему ТРИГГЕР злой? Это очень мощный инструмент, который администраторы базы данных могут использовать для обеспечения соблюдения правил целостности данных. В среде, где целостность данных имеет первостепенное значение (например, корпоративные записи) Триггеры предоставляют ценный ресурс для обеспечения этого, даже для разработчиков приложений. Я использую триггеры сейчас даже в своем личном развитии, поскольку они обеспечивают целостность данных для меня при небольшой накладной производительности, которая в любом случае будет потеряна приложением, выполняющим ту же проверку ... – lassombra

16

Вы забыли добавить пункт 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 ; 
Смежные вопросы