簡體   English   中英

當我嘗試創建觸發器時出錯

[英]Error when i try to create a trigger

錯誤信息:

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 

當您只運行一條語句時,您無需執行任何特殊操作。 您將代碼發送到服務器,然后完成:

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服務器版本相對應的手冊以獲取正確的語法,以在第2行的“ SELECT COUNT(*)AS order_count FROM order”附近使用

在幾乎所有的MySQL客戶端中,默認定界符為分號:

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

觸發器和用戶定義的例程的其他部分是一種特殊情況,因為您需要區分兩種情況:

  1. 元素創作
  2. 元素執行

創建觸發器時,發送的所有內容都是一條語句:所有CREATE TRIGGER代碼。 執行觸發器時,觸發器主體內的每個語句都是一個獨立的查詢。 如何用相同的代碼區分兩種情況? 訣竅是使用標准; 觸發器主體中的分隔符(我們沒有控制權),但是在執行CREATE TRIGGER代碼(我們可以使用大多數客戶端提供的DELIMITER命令)時臨時更改分隔符。

您的代碼的第一個版本缺少所有分隔符。 當前版本缺少觸發器主體分隔符。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM