我尝试创建触发器时出错

时间:2015-12-09 15:18:58

标签: mysql triggers

错误讯息:

SQL(1064):您的SQL语法有错误;检查与MySQL服务器版本对应的手册,以便在第15行的“END”附近使用正确的语法

DELIMITER //
CREATE TRIGGER fill_address AFTER UPDATE ON orders
FOR EACH ROW
	BEGIN
		UPDATE orders
		SET address = CONCAT_WS(
			' ',
			payment_method,
			payment_address_1,
			payment_address_2,
			payment_city,
			payment_postcode,
			payment_country,
			payment_zone)
		WHERE id IN (SELECT id FROM INSERTED)
	END //
DELIMITER

1 个答案:

答案 0 :(得分:0)

当你只发表一个声明时,你不需要做任何特别的事情。您将代码发送到服务器并完成:

SELECT COUNT(*) AS customer_count FROM customer

但是,如果要一次发送多个查询,则需要告诉MySQL每个语句的结束位置。否则,SQL解析器会将所有内容视为一个查询,并且在查询停止有意义的任何地方都将中止解析:

SELECT COUNT(*) AS customer_count FROM customer
SELECT COUNT(*) AS order_count FROM order
  

您的SQL语法有错误;检查手册   对应于您的MySQL服务器版本,以便使用正确的语法   接近' SELECT COUNT(*)AS order_count FROM order'在第2行

在几乎所有MySQL客户端中,默认分隔符是分号:

SELECT COUNT(*) AS customer_count FROM customer;
SELECT COUNT(*) AS order_count FROM order;

触发器和其他用户定义的例程是一种特殊情况,因为您需要区分两种情况:

  1. 元素创建
  2. 元素执行
  3. 创建触发器时,您发送的所有内容都是单个语句:所有CREATE TRIGGER代码。当触发器执行时,触发器主体内的每个语句都是一个独立的查询。我们如何用相同的代码来区分这两种情况?诀窍是在触发器体中使用标准;分隔符(我们无法控制它)但在执行CREATE TRIGGER代码时暂时更改分隔符(我们可以使用提供的DELIMITER命令)大多数客户)。

    您的代码的第一个版本缺少所有分隔符。当前版本缺少触发器主体分隔符。