2009-07-09 35 views
14

此MySQL腳本安裝多個觸發器。MySQL DELIMITER語法錯誤

它運行在運行MySQL 5.0.51b社區的一臺機器上。在另一臺運行MySQL 14.12 Distrib 5.0.45的機器上,對於redhat-linux-gnu(i386),它失敗了,並且出現這個錯誤消息,這似乎與DELIMITER // ... // DELIMITER有關;語法:

272行錯誤1064(42000):您的SQL語法錯誤;檢查與您的MySQL服務器版本相對應的手冊,以找到在「DELIMITER」附近使用的正確語法; DROP TRIGGER IF EXISTS trigger_name; DELIMITER」在行1

腳本語法(總結)是:

DROP TRIGGER IF EXISTS trigger_name; 
DELIMITER // 
CREATE TRIGGER trigger_name BEFORE UPDATE ON table 
FOR EACH ROW BEGIN 
    -- Trigger logic goes here 
END // 
DELIMITER; 

-- More trigger drop/create statements follow 

有什麼不對的劇本,我怎麼能糾正呢?

回答

22

嘗試

DELIMITER ; 

DELIMITER; 

你實際上指定;作爲參數傳遞給DELIMITER命令,所以不具有空間有可能是混淆了。

+0

我並沒有意識到,感謝解釋:) – Sophia 2009-07-09 08:15:34

4

'DELIMITER'和';'之間需要有空格

DELIMITER ; 
# not: 
DELIMITER; 
0

嗯我有類似的問題。我從運行5.0.51的Debian Lenny執行mysqldump,然後嘗試導入到運行5.0的OpenSolaris並獲得相同的錯誤。我有DELIMITER;

版本衝突?

+0

它似乎與版本對於我們來說,一個版本別無分號的工作,另一個只是一個分號工作,而另一需要一個分號並且沒有空格。 – Sophia 2009-09-03 03:04:40

2

只是作爲一個附加的,別人:

分隔符是爲了使整個定義要傳遞給服務器作爲一個單獨的語句。

0

請嘗試以下操作。

我相信它應該解決這個問題。

DELIMITER + 
CREATE TRIGGER STUDENT_INSERT_TRIGGER BEFORE INSERT ON FSL_CONNECTIONS 
FOR EACH ROW BEGIN 
INSERT INTO STUDENT_AUDIT 
SET STUDENT_ID = NEW.STUDENT_ID, 
MAC_ADDRESS = NEW.MAC_ADDRESS, 
IPADDRESS = NEW.IPADDRESS, 
EMAIL_ID = NEW.EMAIL_ID , 
START_TIME=NEW.START_TIME, 
END_TIME=NEW.END_TIME, 
STATUS=NEW.STATUS; 
END; + 

從上面我們使用DELIMITER時。它應該在的

DELIMITER + 
-- 
BLOCK OF SQL WHATEVER YOU WANT TO MENTION 
-- 
+ 
1

形式在MySQL的版本,我用使用的分隔符命令時會出現相同的錯誤,但是這個版本處理分隔符「;」用於語句和分隔符「|」對於我認爲解決問題的存儲過程和函數;試試這個:

DROP TRIGGER IF EXISTS trigger_name;

CREATE TRIGGER trigger_name BEFORE UPDATE ON table FOR EACH ROW BEGIN -- Trigger logic goes here END |

-- other statements or functions here

+0

那是什麼版本? – 2017-06-15 17:07:02