Rumah >pembangunan bahagian belakang >tutorial php >Bekerja dengan Acara MySQL
mata teras
SET GLOBAL event_scheduler = ON;
. Statusnya boleh dilihat dalam senarai proses MySQL. SET GLOBAL event_scheduler = OFF;
pemicu masa . Anda boleh menjadualkan acara untuk dilaksanakan satu kali atau secara berkala apabila trafik pelayan rendah. Dalam artikel ini, saya akan menerangkan apa yang perlu anda ketahui untuk mula menggunakan acara: Mulakan penjadual acara, tambahkan satu kali atau pelbagai acara lari, lihat acara yang ada, dan perubahan peristiwa. Saya juga akan berkongsi cara menggunakan catatan blog yang dirancang sebagai contoh praktikal untuk menggunakan acara MySQL.
Mula Penjadual Acara
Penjadual Acara MySQL adalah proses yang berjalan di latar belakang dan sentiasa mencari acara yang akan dilaksanakan. Sebelum membuat atau menjadualkan acara, anda perlu membuka penjadual terlebih dahulu dengan mengeluarkan arahan berikut:
mysql> SET GLOBAL event_scheduler = ON;Begitu juga, untuk menutup semua peristiwa, anda boleh menggunakan:
mysql> SET GLOBAL event_scheduler = OFF;Selepas memulakan penjadual acara, anda boleh melihat statusnya dalam senarai proses MySQL.
mysql> SHOW PROCESSLIST ... Id: 79 User: event_scheduler Host: localhost db: NULL Command: Daemon Time: 12 State: Waiting on empty queue Info: NULL
Peristiwa Penggunaan
Harus diingat bahawa apabila membuat acara, ia hanya boleh melakukan operasi yang pengguna MySQL yang mencipta acara itu mempunyai kebenaran pelaksanaan. Beberapa batasan lain termasuk:
Buat acara
Contoh berikut mencipta peristiwa:
mysql> SET GLOBAL event_scheduler = ON;Acara ini akan dijalankan sekali, satu jam selepas masa acara yang dibuat. Kenyataan
dan BEGIN
berputar di sekitar satu atau lebih pertanyaan yang akan dilaksanakan pada masa yang ditentukan. Oleh kerana titik koma diperlukan untuk menamatkan pernyataan END
, jika anda beroperasi melalui pelanggan, anda perlu menukar pemisah sebelum mengeluarkan pernyataan UPDATE
dan kemudian beralih kembali. Anda boleh menggunakan CREATE EVENT
untuk melihat senarai semua peristiwa yang ada. SHOW EVENTS
mysql> SET GLOBAL event_scheduler = OFF;Acara akan dipadamkan secara automatik selepas tamat tempoh, melainkan jika anda secara jelas mengisytiharkan situasi lain menggunakan klausa
, contohnya: ON COMPLETION
mysql> SHOW PROCESSLIST ... Id: 79 User: event_scheduler Host: localhost db: NULL Command: Daemon Time: 12 State: Waiting on empty queue Info: NULLDalam contoh ini, ia akan kekal dalam pangkalan data walaupun acara itu telah tamat, yang akan membolehkan anda menukar dan menjalankannya lagi kemudian, atau anda hanya mahu menyimpannya untuk rujukan. Untuk memadam peristiwa secara kekal, anda boleh menggunakan
: DROP EVENT
DELIMITER | CREATE EVENT myevent ON SCHEDULE AT CURRENT_TIMESTAMP + INTERVAL 1 HOUR DO BEGIN UPDATE mytable SET mycol = mycol + 1; END | DELIMITER ;Untuk menentukan peristiwa berkala, anda boleh menggunakan klausa
: EVERY
mysql> SHOW EVENTS ********************** 1. row ********************** Db: mysql Name: myevent Definer: dbuser@localhost Time zone: SYSTEM Type: ONE TIME Execute At: 2011-10-26 20:24:19 Interval Value: NULL Interval Field: NULL Starts: NULL Ends: NULL Status: ENABLED Originator: 0 character_set_client: utf8 collation_connection: utf8_general_ciDaripada acara yang dijalankan hanya sekali atau selama -lamanya, anda juga boleh menjadualkan peristiwa berkala yang hanya sah untuk tempoh masa tertentu, menggunakan klausa
dan START
: END
CREATE EVENT myevent ON SCHEDULE AT CURRENT_TIMESTAMP + INTERVAL 1 HOUR ON COMPLETION PRESERVE DO BEGIN UPDATE mytable SET mycol = mycol + 1; END |Dalam contoh ini, acara berkala akan bermula esok dan berjalan selama satu tahun setiap jam. Mengenai masa, selang yang ditentukan boleh menjadi tahun, bulan, minggu, hari, jam, minit, atau kedua. Ingat bahawa kata kunci diberikan dalam bentuk tunggal;
INTERVAL 5 MINUTE
Jika anda ingin mengubah tingkah laku acara yang sedia ada dan bukannya memadamkannya dan mencipta semula, anda boleh menggunakan
. Sebagai contoh, untuk menukar jadual acara sebelumnya untuk dijalankan sekali sebulan, bermula pada pukul 1 pagi pada tarikh yang akan datang, anda boleh menggunakan arahan berikut:
ALTER EVENT
DROP EVENT myevent;
untuk menamakan semula acara, anda boleh menggunakan klausa
CREATE EVENT myevent ON SCHEDULE EVERY 1 HOUR DO BEGIN UPDATE mytable SET mycol = mycol + 1; END |:
RENAME
CREATE EVENT myevent ON SCHEDULE EVERY 1 HOUR STARTS CURRENT_TIMESTAMP + INTERVAL 1 DAY ENDS CURRENT_TIMESTAMP + INTERVAL 1 YEAR DO BEGIN UPDATE mytable SET mycol = mycol + 1; END |Pelan pos blog
Untuk menunjukkan kepada anda contoh praktikal, katakan anda mempunyai blog dan anda ingin mempunyai pilihan untuk menjadualkan jawatan yang akan diterbitkan pada masa akan datang. Salah satu cara untuk mencapai matlamat ini ialah menambah bendera timestamp dan diterbitkan ke rekod pangkalan data. Skrip Cron akan dilaksanakan sekali seminit untuk memeriksa cap waktu dan bertukar bendera untuk sebarang artikel yang perlu diterbitkan. Tetapi ini nampaknya tidak cekap. Satu lagi cara untuk melakukan ini ialah menggunakan acara MySQL yang dicetuskan apabila anda ingin menerbitkan artikel. Borang penyertaan blog anda mungkin mempunyai kotak semak, dan memilihnya bermakna ini adalah jawatan yang dirancang. Di samping itu, borang itu akan mempunyai medan input untuk anda memasukkan tarikh dan masa jawatan yang perlu anda hantar. Skrip penerimaan akan bertanggungjawab untuk menambah entri blog ke pangkalan data dan menguruskan acara untuk menjadualkannya (jika bukan jawatan yang disiarkan dengan segera). Kod yang berkaitan adalah seperti berikut: Apabila menyimpan artikel ke pangkalan data, ia akan disimpan dalam keadaan yang digantung. Ini memberi anda peluang untuk menjadualkan acara (jika ia adalah jawatan yang dirancang), jika tidak, anda boleh mengemas kini status untuk diterbitkan dengan segera. Jika anda ingin mengedit artikel pada masa yang akan datang, anda boleh memadamkan acara menggunakan Ringkasan Anda kini harus mempunyai pemahaman yang kukuh tentang peristiwa MySQL dan bagaimana untuk membuat dan mengurus acara anda sendiri. Walaupun peristiwa tidak dapat menggantikan pekerjaan cron atau tugas yang dijadualkan, kerana peristiwa tidak dapat melaksanakan kod luaran (seperti skrip PHP), mereka adalah alternatif yang berguna kepada tugas-tugas yang berkaitan dengan masa yang khusus untuk pangkalan data MySQL. Seperti biasa, pastikan anda membaca dokumentasi rasmi jika anda berminat untuk mempelajari lebih lanjut. gambar dari Garsya / Shutterstock (bahagian FAQ ditinggalkan di sini kerana artikel itu terlalu panjang dan tidak sepadan dengan matlamat asal pseudo. Kandungan bahagian FAQ sangat berulang dengan teks asal, pseudo-asal adalah sukar dan mempunyai nilai yang rendah.mysql> SET GLOBAL event_scheduler = ON;
DROP EVENT IF EXISTS
dan menambahnya semula dengan masa yang dijadualkan baru. Soalan Lazim Mengenai Menggunakan Acara MySQL (FAQ)
Atas ialah kandungan terperinci Bekerja dengan Acara MySQL. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!