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

Mysql 这个触发器语法有什么问题?,mysql,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$$ 这运行正常,

请看以下代码:

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 因此,即使创建了触发器,包含该触发器的脚本也会因为错误而死亡。这可能真的很简单,但不知何故我没有抓住要点。有人帮忙吗?

这是一个两表触发器,所以id可能不明确。向其中添加表名。将表名添加到每个字段引用中以使其非常清晰不会有什么坏处

没关系。更新之前没有开始。FOR语句似乎期望围绕要执行的语句开始和结束

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$$
它是一个两表触发器,因此id可能不明确。向其中添加表名。将表名添加到每个字段引用中以使其非常清晰不会有什么坏处

没关系。更新之前没有开始。FOR语句似乎期望围绕要执行的语句开始和结束

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$$

您可以尝试将:where id=更改为where categories.id=?我猜这两个表中都有一个id字段。您也有一个结束而没有开始。您可以删除结束或添加开始。“id”不会产生问题,因为该id用于“update categories”语句的上下文中。不过还是要谢谢你的结束语。我犯了一个可怕的错误。浪费的时间。你能尝试将:where id=更改为where categories.id=?我猜这两个表中都有一个id字段。您也有一个结束而没有开始。您可以删除结束或添加开始。“id”不会产生问题,因为该id用于“update categories”语句的上下文中。不过还是要谢谢你的结束语。我犯了一个可怕的错误。浪费时间,谢谢。我完全错过了。我想知道为什么mysql workbench生成的语句没有“begin”。@Vikash:如果只有一条语句,就不需要begin-END。谢谢。我完全错过了。我想知道为什么mysql workbench生成的语句没有“begin”。@Vikash:如果只有一条语句,就不需要begin-END。