2011-06-10 79 views
0

確定一些奇怪的事情正在進行,我無法弄清楚。我創建了一些觸發器,但在試圖在活動數據庫上創建它們時出現奇怪的錯誤。示例查詢是這樣的:創建觸發器時使用分隔符的奇怪錯誤

delimiter | 

CREATE TRIGGER debug_upd_before BEFORE UPDATE ON properties_availability 
FOR EACH ROW BEGIN 
    INSERT INTO debug_upd_before SET timestamp = NOW(), avID = OLD.avID, avPropertyID = OLD.avPropertyID, 
    avAvailableFrom = OLD.avAvailableFrom, avAvailableTo = OLD.avAvailableTo, avPrice = OLD.avPrice, 
    avIsAvailable = OLD.avIsAvailable; 
END| 

... 

它執行罰款localy。我使用phpmyadmin,因爲我沒有任何其他訪問在線數據庫。我知道我沒有完全權限,並認爲它可能有一些做的,但我得到的錯誤是:

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 'delimiter |

不是「你沒有權限做」或類似的東西那。同樣的情況,當我嘗試執行簡單的東西,如:

delimiter | 
select 1| 
select 2 

我得到的錯誤是一樣的,我不能設置一個分隔符,默認不爲我工作,因爲我有後使用查詢觸發器內部。我嘗試了其他符號作爲分隔符,但結果是一樣的。關於什麼問題以及如何避免它的任何想法?一些觸發器執行多個查詢,如果這有所作爲...

謝謝!

+0

這可能是一個問題在phpmyadmin與分隔符。 – Devart 2011-06-10 08:49:11

+0

我在本地嘗試使用phpmyadmin並且它可以正常工作。我幾乎可以肯定這是關於權限,但錯誤是關於語法...... – Nikoloff 2011-06-10 08:51:42

回答

1

試試這個聲明(無定界符) -

CREATE TRIGGER debug_upd_before BEFORE UPDATE ON properties_availability 
FOR EACH ROW 
INSERT INTO debug_upd_before SET 
    timestamp = now(), 
    avID = OLD.avID, 
    avPropertyID = OLD.avPropertyID, 
    avAvailableFrom = OLD.avAvailableFrom, 
    avAvailableTo = OLD.avAvailableTo, 
    avPrice = OLD.avPrice, 
    avIsAvailable = OLD.avIsAvailable; 
+0

是的,這工作,雖然我得到了更安全的錯誤:「訪問被拒絕;你需要這個操作的超級特權」。不知道這個語法是否適用於多個查詢,但我現在確定它是一個權限問題,並且需要在其他任何事情之前解決該問題......謝謝:) – Nikoloff 2011-06-10 08:55:37

+0

此語法僅適用於一個查詢(當存在無BEGIN ... END子句)。 – Devart 2011-06-10 09:06:24

0

的問題是,|是按位或。
所以你使用一個保留的符號作爲分隔符。

改爲使用$$

+0

正如我所說,我嘗試了不同的分隔符,但那不是問題。和|可以用作分隔符 - 試試我給出的簡單查詢例如 – Nikoloff 2011-06-10 09:48:58

+0

您是否使用過'$$'? MySQL會說:你的SQL語法有錯誤;檢查與您的MySQL服務器版本相對應的手冊,以找到在'delimiter |附近使用的正確語法 – Johan 2011-06-10 09:58:17

+0

同樣的事情。當你沒有權限時(這不應該是一個語法錯誤)給出的錯誤是有問題的。我無法設置任何分隔符,儘管我可以在其他數據庫中擁有更多權限。不完全確定,但你應該幾乎可以使用任何字符串作爲分隔符,而不管它是否是操作符。即'分隔符foo選擇1foo選擇2',所以|不是問題。我正在等待服務器的管理員更改我的權限,現在我沒有什麼可以做的了 – Nikoloff 2011-06-10 11:34:07