2014-01-16 66 views
0

我的觸發器中有一些語法錯誤。Mysql觸發器刪除所有行比時間戳老

我試圖檢查每個插入後,如果表大於5000行,如果是這樣,刪除所有1000行以上的行1000分鐘以上的行停止時,表達到1000行以下。

這裏是代碼

CREATE trigger my_trigger after insert ON myTable 
    IF (SELECT count(Uuid) from myTable) > 5000 
    THEN 
     WHILE (SELECT count(Uuid) from myTable) > 1000 
      DELETE from myTable 
       where myTable.created < (NOW() - INTERVAL 10 MINUTE) 
     END WHILE 
    END IF; 

我怎麼能刪除舊的然後時間戳的所有行?

回答

0

語法錯誤來自您的無效WHILE子句。正確的形式可能是:

SELECT COUNT(Uuid) INTO @cnt FROM myTable; 
WHILE (@cnt > 1000) 
... 

然而,這可能會導致(幾乎)無限循環,如果有超過1000條記錄超過10分鐘(當然,最終所有記錄將超過10分鐘年輕: )。

但這裏的主要問題是,(reference):

A(...)觸發器不能修改已被使用的表(讀或寫)由調用語句( ...)觸發。

但是可以實現與EVENT一個類似效果(這將清除您的表飄飛)。

+0

TY,一個事件確實是一個更好的解決方案,而@cnt用語法做了訣竅。 – Gleeb