在 phpMyAdmin 本機伺服器上執行:
我有兩個表格:user(有資料)和user_t(空)。
它們具有相同的列名、順序和類型(user_t 表有一個額外的欄位用於為輸入添加時間戳記)。
我想建立一個計劃事件來檢查每個使用者日誌的時間戳是否具有特定值,如果存在,我想將其複製到user_t 同時從user 中刪除它。非常簡單。
刪除工作正常。正是 INSERT INTO user_t SELECT * FROM user WHERE user.reg < CURRENT_TIMESTAMP - INTERVAL 3 MINUTE;< CURRENT_TIMESTAMP - INTERVAL 3 MINUTE; 給我帶來了麻煩。
這是我用來建立事件的程式碼:
CREATE EVENT users_u ON SCHEDULE EVERY 1 MINUTE STARTS CURRENT_TIMESTAMP ENDS CURRENT_TIMESTAMP + INTERVAL 1 HOUR DO INSERT INTO user_t SELECT * FROM user WHERE user.reg < CURRENT_TIMESTAMP - INTERVAL 3 MINUTE; DELETE FROM user WHERE reg < CURRENT_TIMESTAMP - INTERVAL 3 MINUTE;
但是,它不斷回傳空結果。所以,我認為我一定做錯了什麼。
你能發自內心地幫助我讓這段程式碼運作起來嗎?畢竟,它來自教程,應該沒問題。
我嘗試過使用程式碼,甚至考慮過研究事務,但這對於這種操作來說似乎太龐大了。
因此,在使用 nbk 的程式碼之後,我終於弄清楚了,這是對我有用的程式碼(我概括了表格和列名稱,這樣它們就不會誤導任何人):
DELIMITER $$
CREATE EVENT event_name
ON SCHEDULE EVERY 1 MINUTE
STARTS CURRENT_TIMESTAMP
ENDS CURRENT_TIMESTAMP + INTERVAL 1 HOUR
DO
BEGIN
INSERT INTO empty_table (col_name1, col_name2, col_name3, col_name4, col_name5)
SELECT col_name1, col_name2, col_name3, col_name4, col_name5 FROM data_table WHERE col_name < CURRENT_TIMESTAMP - INTERVAL 3 MINUTE;
DELETE FROM data_table WHERE col_name < CURRENT_TIMESTAMP - INTERVAL 3 MINUTE;
END $$
DELIMITER ;
希望它對像我這樣的人將來有幫助。 再次感謝 nbk 的快速幫助。非常感謝,當然,您的答案是正確的。
你每分鐘運行一次事件並想要輸入最後三分鐘,我不知道你有那麼多新插入,或者你需要一個Python腳本或這樣插入一小時 ==>出於測試目的,我將頻率設定為 1 分鐘...
您仍然應該重寫您的事件。
首先,您是否真的想要重複項,也許是
INSERT IGNORE,如果違反約束,它將輸入新行第二,如果你有不只一個語句,你需要一個
BEGIN ENDDELIMITER $$ CREATE EVENT users_u ON SCHEDULE EVERY 1 MINUTE STARTS CURRENT_TIMESTAMP ENDS CURRENT_TIMESTAMP + INTERVAL 1 HOUR DO BEGIN INSERT IGNORE INTO user_t SELECT * FROM user WHERE user.reg < CURRENT_TIMESTAMP - INTERVAL 3 MINUTE; DELETE FROM user WHERE reg < CURRENT_TIMESTAMP - INTERVAL 3 MINUTE; END $$ DELIMITER ;