Rumah > pembangunan bahagian belakang > tutorial php > Bekerja dengan Acara MySQL

Bekerja dengan Acara MySQL

尊渡假赌尊渡假赌尊渡假赌
Lepaskan: 2025-03-01 08:48:11
asal
829 orang telah melayarinya

Working with MySQL Events

mata teras

    Acara MySQL, yang diperkenalkan sejak MySQL 5.1.6, adalah pencetus masa yang boleh dijadualkan untuk pelaksanaan satu kali atau berkala, menyediakan alternatif kepada tugas yang dijadualkan dan pekerjaan cron. Mereka boleh digunakan untuk membuat sandaran, memadam rekod usang, atau meringkaskan data laporan, dll.
  • Penjadual Acara MySQL adalah proses latar belakang yang sentiasa mencari peristiwa yang akan dilaksanakan. Ia boleh dimulakan dengan mengeluarkan arahan
  • dan ia boleh ditutup dengan menggunakan SET GLOBAL event_scheduler = ON;. Statusnya boleh dilihat dalam senarai proses MySQL. SET GLOBAL event_scheduler = OFF;
  • Apabila membuat acara, sila ambil perhatian bahawa acara hanya boleh melakukan operasi yang pengguna MySQL yang mencipta acara itu mempunyai kebenaran pelaksanaan. Panjang nama acara terhad kepada 64 aksara dan harus menjadi kes-insensitif dan unik. Peristiwa tidak boleh dibuat, diubah, atau dipadam oleh acara lain, dan fungsi yang disimpan atau fungsi yang ditentukan pengguna tidak boleh dirujuk apabila menyediakan jadual acara.
  • Acara MySQL boleh digunakan dalam senario sebenar, seperti merancang untuk menerbitkan catatan blog. Dengan menggunakan peristiwa MySQL yang dicetuskan apabila anda ingin menerbitkan artikel, anda dapat menguruskan penerbitan pos blog tanpa memerlukan skrip kron yang tidak cekap. Acara boleh dibuat apabila menambah entri blog ke pangkalan data, dan jika anda mengedit catatan blog kemudian, anda boleh memadamkan acara dan menambah semula acara itu dengan masa yang dijadualkan baru.
Acara MySQL telah ditambah dalam MySQL 5.1.6 dan memberikan alternatif kepada tugas -tugas yang dijadualkan dan pekerjaan cron. Peristiwa boleh digunakan untuk membuat sandaran, memadam rekod usang, meringkaskan data laporan, dan banyak lagi. Tidak seperti pencetus standard yang dilaksanakan mengikut keadaan tertentu, peristiwa adalah objek yang dicetuskan oleh masa luput, kadang -kadang dipanggil

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;
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Begitu juga, untuk menutup semua peristiwa, anda boleh menggunakan:

mysql> SET GLOBAL event_scheduler = OFF;
Salin selepas log masuk
Salin selepas log masuk
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
Salin selepas log masuk
Salin selepas log masuk

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:

  • Panjang nama acara terhad kepada 64 aksara.
  • Bermula dengan MySQL 5.1.8, nama acara adalah kes-insensitif;
  • Acara tidak boleh dibuat, diubah, atau dipadam oleh peristiwa lain.
Apabila menetapkan jadual acara, fungsi yang disimpan atau fungsi yang ditentukan pengguna tidak boleh dirujuk.

Buat acara

Contoh berikut mencipta peristiwa:

mysql> SET GLOBAL event_scheduler = ON;
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
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;
Salin selepas log masuk
Salin selepas log masuk
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: NULL
Salin selepas log masuk
Salin selepas log masuk
Dalam 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 ;
Salin selepas log masuk
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_ci
Salin selepas log masuk
Daripada 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 |
Salin selepas log masuk
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

Acara kemas kini

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

untuk mengemas kini acara dengan set pertanyaan yang berbeza, anda boleh menggunakan:
DROP EVENT myevent;
Salin selepas log masuk

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 |
Salin selepas log masuk
:

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 |
Salin selepas log masuk
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:

mysql> SET GLOBAL event_scheduler = ON;
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk

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 DROP EVENT IF EXISTS dan menambahnya semula dengan masa yang dijadualkan baru.

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

Soalan Lazim Mengenai Menggunakan Acara MySQL (FAQ)

(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.

Atas ialah kandungan terperinci Bekerja dengan Acara MySQL. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan