2012-05-08 64 views
0

我有一個非常簡單的觸發器。我從Toad爲mysql工具創建並部署了它,它的工作完美無缺。當我將它交給管理員部署在生產服務器上時,他們正在收到錯誤。mysql觸發代碼從TOAD部署,但不是從myphpadmin或從mysql控制檯部署

phpMyAdmin的錯誤:

1064 - 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 '' at line 4

mysql的控制檯錯誤:

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

當記者問,他們正在從phpMyAdmin的代碼,還他們試圖從MySQL控制檯它們運行得到錯誤

它真的令人沮喪和惱火爲什麼sa我的東西是從GUI工具運行,而不是從webtool或控制檯工作。來自三種不同工具的3種不同行爲

然後我嘗試了同樣的事情,我也得到了錯誤。它令我驚訝的原因

DROP TRIGGER IF EXISTS TRG_ ; 
CREATE TRIGGER TRG_ BEFORE INSERT ON users FOR EACH ROW 
BEGIN 

    DECLARE X INTEGER; 
    SELECT COUNT(*) into X FROM users; 

    IF X >= 16 THEN -- CHANGE THIS NUMBER 
    SIGNAL SQLSTATE '45000' 
    SET MESSAGE_TEXT = 'cant create more users'; 
    END IF; 

END; 

有人能告訴我我做錯了什麼嗎?我不知道,但我想它與分隔符關鍵字,我從來沒有明白的目的。

回答

1

看一看這個問題 - MySQL: How do I use delimiters in triggers?

你應該用分隔符時創建觸發器像源對象。 DELIMITER不是MySQL語句,它是一個控制檯命令,許多MySQL客戶端都支持該命令。你可以試試這個代碼在MySQL控制檯 -

DROP TRIGGER IF EXISTS TRG_ ; 

DELIMITER $$ 

CREATE TRIGGER TRG_ BEFORE INSERT ON users FOR EACH ROW 
BEGIN 

    DECLARE X INTEGER; 
    SELECT COUNT(*) INTO X FROM users; 

    IF X >= 16 THEN -- CHANGE THIS NUMBER 
    SIGNAL SQLSTATE '45000' 
    SET MESSAGE_TEXT = 'cant create more users'; 
    END IF; 

END$$ 

DELIMITER ; 

據我所知一些老phpmyadmin的版本不支持分隔符。