2009-10-28 94 views
4

举个例子,说我有这些表...MySQL的触发与SELECT语句

人(ID,currentyear)

personteam(ID,工作年,队)

一个人是每一年他们都在一家公司工作。 'personteam'存储了团队的记录。只有'person'中的'currentyear'字段等于'personteam'中的'workyear'时,才允许插入“personteam”。

我想根据PERSON中存储的内容,在用户插入到PERSON_TEAM时执行一些检查。所以我正在用select语句写一个触发器。我不是在MySQL的语法确保100%的触发,所以希望这是有道理的......

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

任何人都可以为这样的操作提供一个修正,更正的语法吗?

谢谢。

(这个例子是微不足道的,所以我可以学到请原谅如何无意义听起来可能)

+1

现在假设...... FOR EACH ROW BEGIN SET @variablename =(SELECT currentyear由人P其中p.id = NEW.id); IF @variablename!= NEW.workyear THEN ERROR; ENDIF; END; – ajr 2009-10-28 23:10:42

回答

3

根据MySQL的标准,来处理这个正确的方式将是SIGNAL命令抛出异常回客户。由于这是一个BEFORE触发器,触发器中的错误将阻止mysql继续前进并插入该行。

但是,mysql还不支持SIGNAL,所以我们必须想出一种导致任意错误的方法。

这样做的一种方法是调用一个不存在的过程,as demonstrated here

一个更好的办法是从这个表中删除INSERT权限,而是使用存储过程为你处理插入。