所以,我有一个名为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返回语法错误。有什么想法吗?
答案 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'