如何从MySQL触发器调用存储过程或函数?

时间:2010-11-20 08:18:16

标签: mysql sql stored-procedures triggers

我正在研究MySQL 5.1.3并使用PHPMyAdmin 3.1.3.1来访问它。使用PHP作为服务器端脚本语言。我的问题陈述是我们可以从Trigger语句调用存储过程或函数,这样当调用INSERT | UPDATE | DELETE触发器时,它会根据定义的逻辑调用SP来更新其他一些表。

1 个答案:

答案 0 :(得分:6)

看这里Mysql Trigger Syntax

mysql> delimiter //  
mysql> CREATE TRIGGER upd_check BEFORE UPDATE ON account  
    -> FOR EACH ROW  
    -> BEGIN  
    ->     IF NEW.amount < 0 THEN  
    ->         SET NEW.amount = 0;  
    ->     ELSEIF NEW.amount > 100 THEN  
    ->         SET NEW.amount = 100;  
    ->     END IF;  
    -> END;//  
mysql> delimiter;  

可以更容易地单独定义存储过程,然后使用简单的CALL语句从触发器调用它。如果要从多个触发器中调用相同的例程,这也是有利的。

激活时触发器执行的语句中可能出现的内容存在一些限制:

触发器无法使用CALL语句调用将数据返回给客户端或使用动态SQL的存储过程。 (允许存储过程通过OUTINOUT参数将数据返回到触发器。)

触发器不能使用显式或隐式开始或结束事务的语句,例如START TRANSACTIONCOMMITROLLBACK