在 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 的快速幫助。非常感謝,當然,您的答案是正確的。
P粉0927785852023-09-10 00:57:50
你每分鐘運行一次事件並想要輸入最後三分鐘,我不知道你有那麼多新插入,或者你需要一個Python腳本或這樣插入一小時 ==>出於測試目的,我將頻率設定為 1 分鐘...
您仍然應該重寫您的事件。
首先,您是否真的想要重複項,也許是INSERT IGNORE
,如果違反約束,它將輸入新行
第二,如果你有不只一個語句,你需要一個BEGIN END
DELIMITER $$ 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 ;