Flo*_*son 9 mysql sql triggers
所以,我有一个名为employees的MySQL表.
ID name meta
0 jack ok
1 anne del
Run Code Online (Sandbox Code Playgroud)
我想写一个触发器来阻止meta ='del'的行来更新元字段.所以,如果我这样做:
UPDATE employees SET meta = 'busy' WHERE ID = 0
Run Code Online (Sandbox Code Playgroud)
该行应该更新,元将"忙"
但当我这样做时:
UPDATE employees SET meta = 'busy' WHERE ID = 1
Run Code Online (Sandbox Code Playgroud)
元字段应该仍然是'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 ;
Run Code Online (Sandbox Code Playgroud)
但MySQL返回时出现语法错误.有任何想法吗?
小智 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 ;
Run Code Online (Sandbox Code Playgroud)
你错过了;
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 ;
Run Code Online (Sandbox Code Playgroud)
触发是邪恶的。
触发的替代方法是添加另一个条件AND
UPDATE employees
SET meta = 'busy'
WHERE ID = 1 AND meta <> 'del'
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
27951 次 |
| 最近记录: |