我正在研究MySQL 5.1.3并使用PHPMyAdmin 3.1.3.1来访问它。使用PHP作为服务器端脚本语言。我的问题陈述是我们可以从Trigger语句调用存储过程或函数,这样当调用INSERT | UPDATE | DELETE触发器时,它会根据定义的逻辑调用SP来更新其他一些表。
答案 0 :(得分:6)
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的存储过程。 (允许存储过程通过OUT
或INOUT
参数将数据返回到触发器。)
触发器不能使用显式或隐式开始或结束事务的语句,例如START
TRANSACTION
,COMMIT
或ROLLBACK
。