Rumah > Soal Jawab > teks badan
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.
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粉0927785852023-09-10 00:57:50
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 ;