举个例子,假设我有这些表...
人(id,当年)
personteam (id, workyear, team)
一个人在公司工作的每一年都会被分配到一个团队。 'personteam' 存储团队的记录。仅当“person”中的“currentyear”字段等于“personteam”中的“workyear”时,才允许插入“personteam”。
我想在用户插入 PERSON_TEAM 时根据存储在 PERSON 中的内容进行一些检查。所以我正在写一个带有 select 语句的触发器。我不是 100% 确定 MySQL 触发器的语法,所以希望这是有道理的...
CREATE TRIGGER mytesttrigger BEFORE INSERT ON personteam
FOR EACH ROW
SELECT currentyear AS @variablename FROM person p WHERE p.id = NEW.id IF @variablename != NEW.workyear ERROR
END
任何人都可以为这样的操作提供修改后的更正语法吗?
谢谢。
(这个例子很简单,所以我可以学习所以请原谅它听起来多么毫无意义)
最佳答案
根据 MySQL 标准,处理此问题的正确方法是使用 SIGNAL 命令将错误返回给客户端。因为这是一个 BEFORE 触发器,触发器中的错误将阻止 mysql 继续并插入行。
但是mysql还不支持SIGNAL,所以我们得想办法引起任意错误。
一种方法是调用一个不存在的过程,as demonstrated here .
一个更好的主意是从此表中删除 INSERT 权限,而是使用存储过程为您处理插入。
关于sql - 带有 SELECT 语句的 MySQL 触发器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1640217/