Mysql
 sql >> Teknologi Basis Data >  >> RDS >> Mysql

Ketika baris baru dalam database ditambahkan, program baris perintah eksternal harus dipanggil

Chad Birch memiliki ide bagus dengan menggunakan Pemicu MySQL dan fungsi yang ditentukan pengguna . Anda dapat mengetahui lebih lanjut di Sintaks CREATE TRIGGER MySQL referensi.

Tetapi apakah Anda yakin bahwa Anda perlu memanggil executable segera ketika baris dimasukkan? Sepertinya metode itu akan rentan terhadap kegagalan, karena MySQL mungkin menelurkan beberapa contoh yang dapat dieksekusi secara bersamaan. Jika eksekusi Anda gagal, maka tidak akan ada catatan baris mana yang telah diproses dan mana yang belum. Jika MySQL menunggu eksekusi Anda selesai, maka memasukkan baris mungkin sangat lambat. Juga, jika Chad Birch benar, maka harus mengkompilasi ulang MySQL, jadi kedengarannya sulit.

Alih-alih memanggil yang dapat dieksekusi langsung dari MySQL, saya akan menggunakan pemicu untuk merekam fakta bahwa sebuah baris telah DIMASUKKAN atau DIPERBARUI:catat informasi itu dalam database, baik dengan kolom baru di tabel Anda yang ada atau dengan tabel baru bernama say database_changes . Kemudian buat program eksternal yang secara teratur membaca informasi dari database, memprosesnya, dan menandainya sebagai selesai.

Solusi spesifik Anda akan bergantung pada parameter apa yang sebenarnya dibutuhkan oleh program eksternal.

Jika program eksternal Anda perlu mengetahui baris mana yang dimasukkan, maka solusi Anda bisa seperti ini:Buat tabel baru bernama database_changes dengan bidang date , table_name , dan row_id , dan untuk semua tabel lainnya, buat pemicu seperti ini:

CREATE TRIGGER `my_trigger`
AFTER INSERT ON `table_name`
FOR EACH ROW BEGIN
  INSERT INTO `database_changes` (`date`, `table_name`, `row_id`)
  VALUES (NOW(), "table_name", NEW.id)
END;

Kemudian skrip batch Anda dapat melakukan sesuatu seperti ini:

  1. Pilih baris pertama dalam tabel database_changes.
  2. Proses.
  3. Hapus.
  4. Ulangi 1-3 sampai database_changes kosong.

Dengan pendekatan ini, Anda dapat memiliki kontrol lebih besar atas kapan dan bagaimana data diproses, dan Anda dapat dengan mudah memeriksa untuk melihat apakah data benar-benar diproses (cukup periksa untuk melihat apakah database_changes tabel kosong).



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Mengapa CONCAT () tidak default ke charset default di MySQL?

  2. Mana yang lebih baik:mysql_connect atau mysql_pconnect

  3. DB pengguna MySQL tidak memiliki kolom kata sandi - Menginstal MySQL di OSX

  4. Solusi penskalaan untuk MySQL (Replikasi, Pengelompokan)

  5. Manajemen akun pengguna, peran, izin, otentikasi PHP dan MySQL - Bagian 3