【问题标题】:Creating a trigger in mysql在mysql中创建触发器
【发布时间】:2013-05-30 01:41:02
【问题描述】:

我试图在插入后在一个表上创建一个触发器,它将更新另一个表。

这是我尝试过的代码:

delimiter |
CREATE TRIGGER augmenter_quantite_article AFTER INSERT
ON LigneInterventaire
FOR EACH ROW BEGIN
DECLARE @qte AS INTEGER;
DECLARE @code AS INTEGER;
SELECT @qte = qteInv FROM INSERTED;
SELECT @code = codeArt FROM INSERTED;
UPDATE Article SET qteArt = qteArt + @qte WHERE codeArt = @code;
END;

|

delimiter ;

但我收到此错误消息:

1064 - 您的 SQL 语法有错误;检查手册 对应于您的 MySQL 服务器版本,以便使用正确的语法 '@qte 附近的整数;将@code 声明为整数;选择@qte = qteInv 从插入;第 4 行的 S'

【问题讨论】:

  • 我认为您需要在存储过程或触发器中选择 INTO。您不能只让一个选择自行挂起。另外,请仔细检查您是否必须使用 := 而不是 =

标签: mysql triggers


【解决方案1】:

试试

CREATE TRIGGER augmenter_quantite_article 
AFTER INSERT ON LigneInterventaire
FOR EACH ROW 
  UPDATE Article 
     SET qteArt = qteArt + NEW.qteInv
   WHERE codeArt = NEW.codeArt;

这里是 SQLFiddle 演示。

MySql 的触发器实现有些有限。在 SQL Server 中没有虚拟表 inserteddeleted 本身。相反,您可以分别使用关键字 OLDNEW 访问正在插入或更新的行的旧值和新值。

由于它归结为只有一个 UPDATE 语句,您不再需要使用 BEGIN END 块。另一个优点 - 您也不需要更改 DELIMITER ;)

【讨论】:

  • New 代表什么?
  • 这是inserted 的模拟,但仅用于插入的一行。这就是为什么它显示为FOR EACH ROW ...
猜你喜欢
  • 1970-01-01
  • 2011-02-03
  • 2016-09-19
  • 2013-12-12
  • 1970-01-01
  • 1970-01-01
  • 2015-02-23
  • 2013-07-26
  • 1970-01-01
相关资源
最近更新 更多