在 MySQL 中將資料從一個表複製到另一個表的計劃事件傳回空結果
P粉615886660
P粉615886660 2023-09-09 09:47:01
0
1
657

在 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粉615886660
P粉615886660

全部回覆(1)
P粉092778585

你每分鐘運行一次事件並想要輸入最後三分鐘,我不知道你有那麼多新插入,或者你需要一個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 ;
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板