Pemicu adalah serangkaian tindakan yang dijalankan secara otomatis ketika operasi perubahan yang ditentukan (pernyataan SQL INSERT, UPDATE, atau DELETE) dilakukan pada tabel yang ditentukan. Pemicu berguna untuk tugas-tugas seperti menegakkan aturan bisnis, memvalidasi input data, dan menjaga jejak audit Show Isi Kegunaan untuk pemicu
Manfaat menggunakan pemicu dalam bisnis
Implementasi pemicu SQL didasarkan pada standar SQL. Ini mendukung konstruksi yang umum untuk sebagian besar bahasa pemrograman. Ini mendukung deklarasi variabel lokal, pernyataan untuk mengontrol aliran prosedur, penugasan hasil ekspresi ke variabel, dan penanganan kesalahan Pemicu MySQL Kami berasumsi bahwa Anda terbiasa dengan "Prosedur Tersimpan MySQL", jika tidak, Anda dapat membaca tutorial Prosedur MySQL kami. Anda dapat menggunakan pernyataan prosedur MySQL berikut dalam pemicu
Bagaimana cara membuat pemicu MySQL? Pemicu adalah objek database bernama yang dikaitkan dengan tabel, dan diaktifkan saat peristiwa tertentu (mis. g. penyisipan, perbarui atau hapus) terjadi untuk tabel. Pernyataan CREATE TRIGGER menciptakan pemicu baru di MySQL. Ini sintaksnya Sintaksis CREATE [DEFINER = { user | CURRENT_USER }] TRIGGER trigger_name trigger_time trigger_event ON tbl_name FOR EACH ROW trigger_body trigger_time: { BEFORE | AFTER } trigger_event: { INSERT | UPDATE | DELETE } Penjelasan klausul DEFINER. Klausa DEFINER menentukan akun MySQL yang akan digunakan saat memeriksa hak akses pada waktu aktivasi pemicu. Jika nilai pengguna diberikan, itu harus berupa akun MySQL yang ditentukan sebagai 'user_name'@'host_name' (format yang sama digunakan dalam pernyataan GRANT), CURRENT_USER, atau CURRENT_USER()
trigger_name. Semua pemicu harus memiliki nama unik dalam skema. Pemicu dalam skema yang berbeda dapat memiliki nama yang sama trigger_time. trigger_time adalah waktu tindakan pemicu. Bisa SEBELUM atau SETELAH untuk menunjukkan bahwa pemicu diaktifkan sebelum atau sesudah setiap baris yang akan dimodifikasi trigger_event. trigger_event menunjukkan jenis operasi yang mengaktifkan pemicu. Nilai trigger_event ini diizinkan
tbl_name. Pemicu menjadi terkait dengan tabel bernama tbl_name, yang harus merujuk ke tabel permanen. Anda tidak dapat mengaitkan pemicu dengan tabel SEMENTARA atau tampilan trigger_body. trigger_body adalah pernyataan untuk dieksekusi saat pemicu diaktifkan. Untuk mengeksekusi banyak pernyataan, gunakan BEGIN. Konstruksi pernyataan majemuk END. Ini juga memungkinkan Anda untuk menggunakan pernyataan yang sama yang diperbolehkan dalam rutinitas tersimpan Ini adalah contoh sederhana mysql> CREATE TRIGGER ins_sum BEFORE INSERT ON account -> FOR EACH ROW SET @sum = @sum + NEW.amount; Query OK, 0 rows affected (0.06 sec)_ Pada contoh di atas, ada kata kunci baru 'BARU' yang merupakan ekstensi MySQL untuk memicu. Ada dua ekstensi MySQL untuk memicu 'OLD' dan 'NEW'. LAMA dan BARU tidak peka huruf besar-kecil
Kolom bernama OLD hanya bisa dibaca. Anda dapat merujuknya (jika Anda memiliki hak istimewa SELECT), tetapi tidak mengubahnya. Anda dapat merujuk ke kolom bernama BARU jika Anda memiliki hak istimewa SELECT untuk itu. Dalam pemicu BEFORE, Anda juga dapat mengubah nilainya dengan SET NEW. col_name = nilai jika Anda memiliki hak UPDATE untuk itu. Ini berarti Anda dapat menggunakan pemicu untuk mengubah nilai yang akan dimasukkan ke dalam baris baru atau digunakan untuk memperbarui baris. (Pernyataan SET seperti itu tidak berpengaruh pada pemicu SETELAH karena perubahan baris sudah terjadi. ) Database sampel, tabel, struktur tabel, catatan tabel untuk berbagai contoh Nama Basis Data. jam Struktur tabel. emp_details Rekaman tabel (pada beberapa bidang). emp_details mysql> SELECT EMPLOYEE_ID, FIRST_NAME, LAST_NAME, JOB_ID, SALARY, COMMISSION_PCT FROM emp_details; Alat untuk membuat Pemicu MySQL Anda dapat menulis prosedur di alat baris perintah MySQL atau Anda dapat menggunakan meja kerja MySQL yang merupakan alat front-end yang sangat baik (di sini kami telah menggunakan versi 5. 3 M) Alat baris perintah MySQL. - Pilih perintah MySQL Client dari menu Start Memilih MySQL command prompt layar berikut akan muncul Setelah login berhasil, Anda dapat mengakses command prompt MySQL Sekarang Anda dapat menulis pemicu Anda sendiri di tabel tertentu, lihat contoh berikut Meja kerja MySQL (5. 3 M). - Pilih meja kerja MySQL dari menu Mulai Setelah memilih meja kerja MySQL, layar login berikut akan muncul Sekarang masukkan detail login Setelah login berhasil, layar baru akan muncul dan dari panel browser objek pilih database Setelah memilih database, pilih tabel Sekarang klik kanan pada emp_details sebuah jendela muncul, klik Alter Table Mengklik " Ubah Tabel " detail emp_details akan datang Sekarang klik tab Trigger di bagian sebelumnya, lalu pilih Timing/Event mungkin AFTER DELETE, AFTER INSERT, AFTER UPDATE atau BEFORE DELETE, BEFORE INSERT ATAU BEFORE UPDATE. Mari kita pilih SETELAH INSERT, Anda juga memperhatikan bahwa ada tombol Add Trigger Mengklik tombol Tambahkan Pemicu, kode default pada pemicu akan muncul berdasarkan pemilihan Waktu/Acara Nama Pemicu. emp_details_AINS USE `hr`; DELIMITER $$ CREATE TRIGGER `emp_details_AINS` AFTER INSERT ON emp_details FOR EACH ROW -- Edit trigger body code below this line. Do not edit lines above this one Setelah menyelesaikan kode, klik tombol terapkan Catatan. Lihat teks baru Hapus Pemicu telah hadir di tombol Tambahkan Pemicu. Mengklik ini Anda dapat menghapus pemicunya Akhirnya Anda dapat meninjau skrip sekali lagi, karena tidak ada kesalahan, mari klik tombol Terapkan Ini jendela terakhir sebelum selesai. Biarkan klik tombol Selesai Jika Anda melihat skemanya, Anda akan melihat pemicu emp_details_AINS di bawah tabel emp_details sebagai berikut Pemicu MySQL. Contoh SETELAH INSERT Dalam contoh berikut, kami memiliki dua tabel. emp_details dan log_emp_details. Untuk memasukkan beberapa informasi ke dalam tabel log_ emp_details (yang memiliki tiga bidang id karyawan dan gaji dan waktu edt) setiap kali, ketika INSERT terjadi pada tabel emp_details kami telah menggunakan pemicu berikut DELIMITER $$ USE `hr` $$ CREATE DEFINER=`root`@`127.0.0.1` TRIGGER `hr`.`emp_details_AINS` AFTER INSERT ON `hr`.`emp_details` FOR EACH ROW -- Edit trigger body code below this line. Do not edit lines above this one BEGIN INSERT INTO log_emp_details VALUES(NEW.employee_id, NEW.salary, NOW()); END$$_ Rekaman tabel (pada beberapa kolom). emp_details mysql> SELECT EMPLOYEE_ID, FIRST_NAME, LAST_NAME, JOB_ID, SALARY, COMMISSION_PCT FROM emp_details; +-------------+------------+-----------+---------+----------+----------------+ | EMPLOYEE_ID | FIRST_NAME | LAST_NAME | JOB_ID | SALARY | COMMISSION_PCT | +-------------+------------+-----------+---------+----------+----------------+ | 100 | Steven | King | AD_PRES | 24000.00 | 0.10 | | 101 | Neena | Kochhar | AD_VP | 17000.00 | 0.50 | | 102 | Lex | De Haan | AD_VP | 17000.00 | 0.50 | | 103 | Alexander | Hunold | IT_PROG | 9000.00 | 0.25 | | 104 | Bruce | Ernst | IT_PROG | 6000.00 | 0.25 | | 105 | David | Austin | IT_PROG | 4800.00 | 0.25 | +-------------+------------+-----------+---------+----------+----------------+ 6 rows in set (0.00 sec) Rekaman tabel (semua kolom). log_emp_details mysql> SELECT * FROM log_emp_details; +-------------+----------+---------------------+ | emp_details | SALARY | EDTTIME | +-------------+----------+---------------------+ | 100 | 24000.00 | 2011-01-15 00:00:00 | | 101 | 17000.00 | 2010-01-12 00:00:00 | | 102 | 17000.00 | 2010-09-22 00:00:00 | | 103 | 9000.00 | 2011-06-21 00:00:00 | | 104 | 6000.00 | 2012-07-05 00:00:00 | | 105 | 4800.00 | 2011-06-21 00:00:00 | +-------------+----------+---------------------+ 6 rows in set (0.02 sec)_ Sekarang masukkan satu catatan di tabel emp_details lihat catatan di tabel emp_details dan log_emp_details mysql> INSERT INTO emp_details VALUES(236, 'RABI', 'CHANDRA', 'RABI','590.423.45700', '2013-01-12', 'AD_VP', 15000, .5); Query OK, 1 row affected (0.07 sec) mysql> SELECT EMPLOYEE_ID, FIRST_NAME, LAST_NAME, JOB_ID, SALARY, COMMISSION_PCT FROM emp_details; +-------------+------------+-----------+---------+----------+----------------+ | EMPLOYEE_ID | FIRST_NAME | LAST_NAME | JOB_ID | SALARY | COMMISSION_PCT | +-------------+------------+-----------+---------+----------+----------------+ | 100 | Steven | King | AD_PRES | 24000.00 | 0.10 | | 101 | Neena | Kochhar | AD_VP | 17000.00 | 0.50 | | 102 | Lex | De Haan | AD_VP | 17000.00 | 0.50 | | 103 | Alexander | Hunold | IT_PROG | 9000.00 | 0.25 | | 104 | Bruce | Ernst | IT_PROG | 6000.00 | 0.25 | | 105 | David | Austin | IT_PROG | 4800.00 | 0.25 | | 236 | RABI | CHANDRA | AD_VP | 15000.00 | 0.50 | +-------------+------------+-----------+---------+----------+----------------+ 7 rows in set (0.00 sec) mysql> SELECT * FROM log_emp_details; +-------------+----------+---------------------+ | emp_details | SALARY | EDTTIME | +-------------+----------+---------------------+ | 100 | 24000.00 | 2011-01-15 00:00:00 | | 101 | 17000.00 | 2010-01-12 00:00:00 | | 102 | 17000.00 | 2010-09-22 00:00:00 | | 103 | 9000.00 | 2011-06-21 00:00:00 | | 104 | 6000.00 | 2012-07-05 00:00:00 | | 105 | 4800.00 | 2011-06-21 00:00:00 | | 236 | 15000.00 | 2013-07-15 16:52:24 | +-------------+----------+---------------------+ 7 rows in set (0.00 sec) Pemicu MySQL. Contoh SEBELUM INSERT Pada contoh berikut, sebelum memasukkan record baru ke dalam tabel emp_details, trigger memeriksa nilai kolom FIRST_NAME, LAST_NAME, JOB_ID dan mysql> CREATE TRIGGER ins_sum BEFORE INSERT ON account -> FOR EACH ROW SET @sum = @sum + NEW.amount; Query OK, 0 rows affected (0.06 sec)0Sekarang masukkan baris ke tabel emp_details (periksa kolom FIRST_NAME, LAST_NAME, JOB_ID). mysql> CREATE TRIGGER ins_sum BEFORE INSERT ON account -> FOR EACH ROW SET @sum = @sum + NEW.amount; Query OK, 0 rows affected (0.06 sec)_1 Sekarang daftarkan field emp_details berikut mysql> CREATE TRIGGER ins_sum BEFORE INSERT ON account -> FOR EACH ROW SET @sum = @sum + NEW.amount; Query OK, 0 rows affected (0.06 sec)_2 Lihat baris terakhir FIRST_NAME - > 'Ana' telah berubah menjadi 'Ana' Pemicu MySQL. Contoh SETELAH PEMBARUAN Kami memiliki dua tabel student_mast dan stu_log. student_mast memiliki tiga kolom STUDENT_ID, NAME, ST_CLASS. tabel stu_log memiliki dua kolom user_id dan description mysql> CREATE TRIGGER ins_sum BEFORE INSERT ON account -> FOR EACH ROW SET @sum = @sum + NEW.amount; Query OK, 0 rows affected (0.06 sec)_3 Mari kita promosikan semua siswa di kelas i berikutnya. e. 7 akan menjadi 8, 8 akan menjadi 9 dan seterusnya. Setelah memperbarui satu baris dalam tabel student_mast, baris baru akan dimasukkan ke dalam tabel stu_log di mana kami akan menyimpan id pengguna saat ini dan deskripsi kecil mengenai pembaruan saat ini. Ini kode pemicunya mysql> CREATE TRIGGER ins_sum BEFORE INSERT ON account -> FOR EACH ROW SET @sum = @sum + NEW.amount; Query OK, 0 rows affected (0.06 sec)_4 Setelah memperbarui tabel STUDENT_MAST mysql> CREATE TRIGGER ins_sum BEFORE INSERT ON account -> FOR EACH ROW SET @sum = @sum + NEW.amount; Query OK, 0 rows affected (0.06 sec)_5 Pemicu menampilkan catatan yang diperbarui di 'stu_log'. Berikut adalah posisi tabel STUDENT_MAST dan STU_LOG terbaru mysql> CREATE TRIGGER ins_sum BEFORE INSERT ON account -> FOR EACH ROW SET @sum = @sum + NEW.amount; Query OK, 0 rows affected (0.06 sec)_6 Pemicu MySQL. Contoh SEBELUM PEMBARUAN Kami memiliki tabel student_marks dengan 10 kolom dan 4 baris. Data hanya ada di kolom STUDENT_ID dan NAME mysql> CREATE TRIGGER ins_sum BEFORE INSERT ON account -> FOR EACH ROW SET @sum = @sum + NEW.amount; Query OK, 0 rows affected (0.06 sec)_7 Sekarang ujian telah selesai dan kami telah menerima semua nilai mata pelajaran, sekarang kami akan memperbarui tabel, nilai total semua mata pelajaran, persentase nilai total dan nilai akan dihitung secara otomatis. Untuk perhitungan sampel ini, kondisi berikut diasumsikan Nilai Total (akan disimpan di kolom TOTAL). JUMLAH = SUB1 + SUB2 + SUB3 + SUB4 + SUB5 Ini kodenya mysql> CREATE TRIGGER ins_sum BEFORE INSERT ON account -> FOR EACH ROW SET @sum = @sum + NEW.amount; Query OK, 0 rows affected (0.06 sec)_8 Mari perbarui nilai siswa mysql> CREATE TRIGGER ins_sum BEFORE INSERT ON account -> FOR EACH ROW SET @sum = @sum + NEW.amount; Query OK, 0 rows affected (0.06 sec)_9 Sekarang periksa tabel STUDENT_MARKS dengan data yang diperbarui. Pemicu menampilkan catatan yang diperbarui di 'stu_log' mysql> SELECT EMPLOYEE_ID, FIRST_NAME, LAST_NAME, JOB_ID, SALARY, COMMISSION_PCT FROM emp_details;0 Pemicu MySQL. Contoh SETELAH DELETE Dalam contoh 'SETELAH UPDATE' kami, kami memiliki dua tabel student_mast dan stu_log. student_mast memiliki tiga kolom STUDENT_ID, NAME, ST_CLASS dan tabel stu_log memiliki dua kolom user_id dan description. Kami ingin menyimpan beberapa informasi dalam tabel stu_log setelah operasi penghapusan terjadi pada tabel student_mast. Inilah pemicunya mysql> SELECT EMPLOYEE_ID, FIRST_NAME, LAST_NAME, JOB_ID, SALARY, COMMISSION_PCT FROM emp_details;1 Izinkan menghapus siswa dari STUDENT_MAST mysql> SELECT EMPLOYEE_ID, FIRST_NAME, LAST_NAME, JOB_ID, SALARY, COMMISSION_PCT FROM emp_details;2 Berikut adalah posisi tabel STUDENT_MAST, STU_LOG terbaru mysql> SELECT EMPLOYEE_ID, FIRST_NAME, LAST_NAME, JOB_ID, SALARY, COMMISSION_PCT FROM emp_details;_3 Bagaimana MySQL menangani kesalahan selama eksekusi pemicu?
Hapus pemicu MySQL Untuk menghapus atau menghancurkan pemicu, gunakan pernyataan DROP TRIGGER. Anda harus menentukan nama skema jika pemicu tidak ada dalam skema default (saat ini). Bagaimana cara memasukkan hapus dan perbarui di PHP?Langkah Membuat Insert, View, Edit dan Delete Record dari Database Menggunakan PHP dan MySQLi . Buat Tabel Lain untuk Catatan Perbarui File Dasbor Buat Sisipkan Halaman Buat Halaman Tampilan Buat Edit/Perbarui Halaman Buat Hapus Halaman Bagaimana cara mengedit dan memperbarui data di PHP? |