这个mysql创建触发器语句有什么问题

时间:2012-04-06 21:20:45

标签: mysql

CREATE TRIGGER google_inventory BEFORE UPDATE ON `cataloginventory_stock_item`
FOR EACH ROW 
BEGIN 
   update `catalog_product_entity_int` 
   set value=20 
   where attribute_id=552 
          and entity_id=NEW.product_id 
          and NEW.is_in_stock=0;
   update `catalog_product_entity_int` 
   set value=21 
   where attribute_id=552 
          and entity_id=NEW.product_id 
          and NEW.is_in_stock=1;
  END;

它给了我以下错误:

  

1064 - 您的SQL语法出错;检查手册   对应于您的MySQL服务器版本,以便使用正确的语法   靠近''第4行

我是一名SQL Server专家,无法解决问题所在。

2 个答案:

答案 0 :(得分:6)

您需要更改分隔符。没有它,分号就会结束CREATE TRIGGER语句。

delimiter |

CREATE TRIGGER google_inventory BEFORE UPDATE ON `cataloginventory_stock_item`
FOR EACH ROW 
BEGIN 
   update `catalog_product_entity_int` 
   set value=20 
   where attribute_id=552 
          and entity_id=NEW.product_id and NEW.is_in_stock=0;
   update `catalog_product_entity_int` 
   set value=21 
   where attribute_id=552 
          and entity_id=NEW.product_id and NEW.is_in_stock=1;
  END;
|

delimiter ;

答案 1 :(得分:3)

触发器中的分号正在拧紧它。您必须使用DELIMITER关键字来更改MySQL正在使用的分隔符。

来自http://dev.mysql.com/doc/refman/5.0/en/create-procedure.html

mysql> delimiter //

mysql> CREATE PROCEDURE simpleproc (OUT param1 INT)
    -> BEGIN
    ->   SELECT COUNT(*) INTO param1 FROM t;
    -> END//
Query OK, 0 rows affected (0.00 sec)

mysql> delimiter ;