Acara berjadual untuk menyalin data dari satu jadual ke jadual lain dalam MySQL mengembalikan hasil kosong
P粉615886660
P粉615886660 2023-09-09 09:47:01
0
1
652

Berjalan pada pelayan tempatan phpMyAdmin: Saya ada dua meja: user(有数据)和user_t(kosong). Ia mempunyai nama lajur, susunan dan jenis yang sama (user_t jadual mempunyai lajur tambahan untuk cap masa input).

Saya mahu mencipta 计划事件来检查每个用户日志的时间戳是否具有特定值,如果存在,我想将其复制到user_t 同时从 user untuk memadamkannya. sangat ringkas.

Pemadaman berfungsi dengan baik. Ia adalah INSERT INTO user_t SELECT * FROM user WHERE user.reg < CURRENT_TIMESTAMP - INTERVAL 3 MINUTE; yang membawa saya ke dalam masalah.

Ini ialah kod yang saya gunakan untuk mencipta acara:

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;

Namun, ia tetap kembali 空结果. Jadi, saya fikir saya mesti melakukan sesuatu yang salah. Bolehkah anda dengan ikhlas membantu saya memastikan kod ini berfungsi? Lagipun, ia adalah dari tutorial dan sepatutnya baik.

Saya telah mencuba menggunakan kod dan juga mempertimbangkan untuk menyelidik 事务 tetapi nampaknya terlalu besar untuk operasi seperti ini.

Sunting

Jadi selepas bermain-main dengan kod nbk akhirnya saya dapat memahaminya dan inilah kod yang berkesan untuk saya (saya umumkan nama jadual dan lajur supaya mereka tidak mengelirukan sesiapa):

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 ;

Semoga ia membantu orang seperti saya pada masa akan datang. Terima kasih sekali lagi nbk atas bantuan pantas. Terima kasih banyak, sudah tentu jawapan anda betul.

P粉615886660
P粉615886660

membalas semua(1)
P粉092778585

Anda menjalankan acara setiap minit dan ingin memasukkan tiga minit terakhir, saya tidak tahu sama ada anda mempunyai banyak sisipan baharu atau anda memerlukan skrip python atau sisipan seperti ini selama sejam ==>Untuk tujuan ujian saya tetapkan kekerapan kepada 1 minit...

Anda masih harus menulis semula acara anda.

Pertama, adakah anda benar-benar mahukan pendua, mungkin INSERT IGNORE, jika kekangan dilanggar ia akan memasuki baris baru

Kedua, jika anda mempunyai lebih daripada satu kenyataan, anda perlukan satu 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 ;
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan