2013-12-19 105 views
3

我一定是做了非常愚蠢的,但下面是正確的:Scedule事件的Mysql不接受語法BEGIN END

CREATE EVENT delete_old 
ON SCHEDULE 
EVERY 1 DAY 
COMMENT 'Clears old cache data from the DB.' 
DO 
DELETE FROM summoners 
WHERE `date` < (NOW() - INTERVAL 7 DAY); 

下一個位似乎拋出一個語法錯誤在最後2行:

CREATE EVENT delete_old 
ON SCHEDULE 
EVERY 1 DAY 
COMMENT 'Clears old cache data from the DB.' 
DO BEGIN 
DELETE FROM summoners 
WHERE `date` < (NOW() - INTERVAL 7 DAY); 
END; 

我知道的語法是正確的,但MySQL Workbench不同意。我打算在BEGIN - END部分中執行多個表格,這就是爲什麼我需要它。

我希望有人能弄清楚這裏出了什麼問題,我很茫然。 在此先感謝, 笑臉

回答

6

您必須將DELIMITER更改爲未在您的活動正文中出現的內容。

我剛試過它(MySQL Workbench 6.0.6,MySQL 5.6),它工作正常。這裏有一個屏幕截圖:

enter image description here

+0

這兩條評論都很清楚和正確。我不記得爲oracle的事情做這件事。但是,這是完美的,謝謝! – Smileynator

+0

在觸發器/過程/事件的主體內部發生分號時,更改分隔符以處理歧義的情況並不少見。例如,我知道PostgreSQL和Firebird也需要使用這種技術。 –

2

這是因爲;身體打破你的命令在中間。使用不同的分隔符。

DELIMITER | 

CREATE EVENT delete_old 
ON SCHEDULE 
EVERY 1 DAY 
COMMENT 'Clears old cache data from the DB.' 
DO BEGIN 
DELETE FROM summoners 
WHERE `date` < (NOW() - INTERVAL 7 DAY); 
END; 

| DELIMITER ;