这个触发器语法有什么问题?

时间:2011-05-01 17:42:59

标签: mysql

看看这段代码:

DELIMITER $$
DROP TRIGGER IF EXISTS `after_product_insert` $$
CREATE TRIGGER `after_product_insert`
AFTER INSERT ON `products`
    FOR EACH ROW
    UPDATE `categories` SET product_count=product_count+1 where id = NEW.category_id;
END$$

这运行正常,但显示一些错误。这是输出:

Query OK, 0 rows affected (0.16 sec)

ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'END' at line 1

因此,即使创建了触发器,脚本(包含此触发器)也会因为错误而死亡。这可能很简单但不知何故我错过了这一点。帮助任何人?

1 个答案:

答案 0 :(得分:4)

这是一个两个表触发器,因此id可能不明确。将表名添加到其中。将表名添加到每个字段引用都不会有什么坏处。

别介意。 BEGIN之前没有UPDATE。对于要执行的语句,FOR语句似乎期望BEGINEND

DELIMITER $$
DROP TRIGGER IF EXISTS `after_product_insert` $$
CREATE TRIGGER `after_product_insert`
AFTER INSERT ON `products`
  FOR EACH ROW
  BEGIN
    UPDATE `categories`
      SET product_count=product_count+1
      WHERE id = NEW.category_id;
  END$$
相关问题