mysql-更新前的触发器检查值
mysql-更新前的触发器检查值,mysql,mysql-error-1064,Mysql,Mysql Error 1064,我试图触发一个触发器,检查更新后员工的工资是否低于其经理的工资,如果低于,则中止更新 CREATE TRIGGER Employee_BeforeUpdate BEFORE UPDATE ON Employee FOR EACH ROW BEGIN IF EXISTS ( SELECT * FROM Manager, Manages WHERE NEW.eid = Manages.eid AND Manager.mid = Manages.mid
我试图触发一个触发器,检查更新后员工的工资是否低于其经理的工资,如果低于,则中止更新
CREATE TRIGGER Employee_BeforeUpdate
BEFORE UPDATE ON Employee
FOR EACH ROW
BEGIN
IF EXISTS (
SELECT * FROM Manager, Manages
WHERE NEW.eid = Manages.eid
AND Manager.mid = Manages.mid
AND NEW.salary > Manager.salary)
THEN SIGNAL SQLSTATE '45000' SET message_text = 'Error message';
END IF;
END;
我在第9行的“”附近有一个语法错误(1064),我不知道为什么。这也是触发的正确方式吗
(MySql版本5.7.23-0ubuntu.18.04.1)
- 您需要将分隔符重新定义为其他内容(例如:
),而不是($
);
- 此外,作为一项安全措施,检查同名触发器是否已存在(
)如果存在,则丢弃触发器
- 最后,将
分隔符重新定义为
代码>
DELIMITER $$
DROP TRIGGER IF EXISTS Employee_BeforeUpdate $$
CREATE TRIGGER Employee_BeforeUpdate
BEFORE UPDATE ON Employee
FOR EACH ROW
BEGIN
IF EXISTS (
SELECT * FROM Manager, Manages
WHERE NEW.eid = Manages.eid
AND Manager.mid = Manages.mid
AND NEW.salary > Manager.salary)
THEN SIGNAL SQLSTATE '45000' SET message_text = 'Error message';
END IF;
END $$
DELIMITER ;
不起作用,现在它在第1行的“DELIMITER”附近出现以下错误“error 1604(42000)”@Oppac在
END
和$$
打字之间需要一个空格-我正在修复它。请稍后检查更新的答案。我尝试了更新的答案,但仍然有相同的错误。我也不知道它是否相关,但触发器是我的sql文件中唯一的东西。@Oppac如果条件需要一些返工,也许可以。我怀疑if EXISTS
是否可以这样使用。你能给我两个表的create table
语句吗。只要相关领域就足够了。我会在我的本地电脑上试用,然后带着补丁回来。@Oppac我刚刚在我的本地电脑上复制了你的表格。我可以成功地创建触发器。你确定你在复制整个事件并创建触发器吗?
DELIMITER $$
DROP TRIGGER IF EXISTS Employee_BeforeUpdate $$
CREATE TRIGGER Employee_BeforeUpdate
BEFORE UPDATE ON Employee
FOR EACH ROW
BEGIN
IF EXISTS (
SELECT * FROM Manager, Manages
WHERE NEW.eid = Manages.eid
AND Manager.mid = Manages.mid
AND NEW.salary > Manager.salary)
THEN SIGNAL SQLSTATE '45000' SET message_text = 'Error message';
END IF;
END $$
DELIMITER ;