Pendahuluan
Pemicu MySQL menerapkan batasan pada tabel saat menambahkan, memperbarui, atau menghapus baris tabel.
Kolom di MySQL menerapkan sedikit batasan nilai. Misalnya, menyetel tipe data kolom sebagai tiny int dan bukan nol membutuhkan masukan nilai bilangan kecil. Namun, lebih banyak batasan diperlukan untuk menjaga integritas data.
Tutorial ini menunjukkan cara menggunakan pemicu MySQL dan memberikan contoh untuk setiap jenis pemicu.
 
 Prasyarat
- Sistem yang menjalankan MySQL pada server database
- Akun pengguna MySQL dengan hak akses root
- Pengetahuan tentang perintah dasar MySQL (lihat lembar contekan perintah MySQL yang dapat diunduh)
Apa yang dimaksud dengan Pemicu di MySQL?
Pemicu adalah objek MySQL bernama yang aktif ketika suatu peristiwa terjadi dalam tabel. Pemicu adalah jenis prosedur tersimpan tertentu yang terkait dengan tabel tertentu.
 Pemicu memungkinkan akses ke nilai dari tabel untuk tujuan perbandingan menggunakan NEW  dan OLD  . Ketersediaan pengubah bergantung pada peristiwa pemicu yang Anda gunakan:
| Peristiwa Pemicu | TUA | BARU | 
| MASUKKAN | Tidak | Ya | 
| PERBARUI | Ya | Ya | 
| HAPUS | Ya | Tidak | 
 Memeriksa atau mengubah nilai saat mencoba memasukkan data akan membuat NEW.<column name>  pengubah tersedia. Ini karena tabel diperbarui dengan konten baru. Sebaliknya, sebuah OLD.<column name>  value tidak ada untuk pernyataan insert karena tidak ada informasi yang ada di tempatnya sebelumnya.
 Saat memperbarui baris tabel, kedua pengubah tersedia. Ada OLD.<colum name>  data yang ingin kami perbarui ke NEW.<column name>  data.
 Terakhir, saat menghapus baris data, OLD.<column name>  pengubah mengakses nilai yang dihapus. NEW.<column name>  tidak ada karena tidak ada yang menggantikan nilai lama setelah dihapus.
Contoh Pemicu MySQL
Sebagai contoh pemicu yang diterapkan, memasukkan nilai baru ke dalam tabel orang menghasilkan hasil yang berbeda dari input asli:
 
 Perhatikan nama yang dimasukkan awalnya huruf kecil. Saat memilih tabel, huruf pertama ditampilkan sebagai huruf besar. Meskipun tidak ada indikasi yang berbeda dari pernyataan penyisipan biasa, pemicu diaktifkan sebelum pernyataan penyisipan untuk menggunakan huruf kapital pada huruf pertama dari nama tersebut.
Menggunakan Pemicu MySQL
Setiap pemicu yang terkait dengan tabel memiliki nama dan fungsi unik berdasarkan dua faktor:
 1. Waktu . BEFORE  atau AFTER  peristiwa baris tertentu.
 2. Acara . INSERT  , UPDATE  atau DELETE  .
 
 MySQL memicu kebakaran tergantung pada waktu aktivasi dan peristiwa untuk total enam kombinasi pemicu unik. Pernyataan sebelum membantu untuk memeriksa data dan membuat perubahan sebelum membuat komitmen, sedangkan pernyataan setelah mengkomit data terlebih dahulu dan kemudian mengeksekusi pernyataan.
Eksekusi serangkaian tindakan terjadi secara otomatis, memengaruhi semua baris yang dimasukkan, dihapus, atau diperbarui dalam pernyataan.
Buat Pemicu
 Gunakan CREATE TRIGGER  sintaks pernyataan untuk membuat pemicu baru:
CREATE TRIGGER <trigger name> <trigger time > <trigger event>
ON <table name>
FOR EACH ROW
<trigger body>;Praktik terbaik adalah memberi nama pemicu dengan informasi berikut:
<trigger time>_<table name>_<trigger event>Misalnya, jika pemicu diaktifkan sebelum menyisipkan di atas meja bernama karyawan , konvensi terbaik adalah memanggil pemicu:
before_employee_insertAtau, praktik umum adalah menggunakan format berikut:
<table name>_<first letter of trigger time><first letter of trigger name>sebelum menyisipkan nama pemicu untuk tabel karyawan terlihat seperti ini:
employee_bi
 Pemicu dijalankan pada waktu tertentu dari suatu peristiwa di tabel yang ditentukan oleh  
 Untuk menghapus pemicu, gunakan  
 Atau, gunakan: 
 Pesan kesalahan tidak ditampilkan karena tidak ada pemicu, jadi tidak ada peringatan yang dicetak. 
 Buat database untuk kode contoh pemicu dengan struktur berikut: 
 1. Buat tabel bernama orang dengan nama dan usia untuk kolom. 
 Masukkan data sampel ke dalam tabel: 
 Pilih tabel untuk melihat hasilnya: 
 2. Buat tabel bernama usia_rata-rata dengan kolom bernama rata-rata : 
 Masukkan nilai usia rata-rata ke dalam tabel: 
 Pilih tabel untuk melihat hasilnya: 
 3. Buat tabel bernama person_archive dengan nama , usia , dan waktu kolom: 
 Untuk membuat  
  
 SEBELUM MASUKKAN Contoh Pemicu  
 Buat  
 Memasukkan data mengaktifkan pemicu dan memeriksa nilai usia sebelum melakukan informasi: 
 Konsol menampilkan pesan kesalahan deskriptif. Data tidak dimasukkan ke dalam tabel karena pemeriksaan pemicu gagal. 
 Buat  
  
 SETELAH MASUKKAN Contoh Pemicu  
 Menyisipkan baris baru ke dalam orang tabel tidak secara otomatis memperbarui rata-rata dalam usia_rata-rata meja. Buat  
 Menyisipkan baris baru ke dalam orang tabel mengaktifkan pemicu: 
 Data berhasil dikomit ke orang tabel dan memperbarui usia_rata-rata tabel dengan nilai rata-rata yang benar. 
 Buat  
  
 SEBELUM MEMPERBARUI Contoh Pemicu  
 Jika ada batasan usia untuk orang tabel sebelum memasukkan data, batasan usia juga harus ada sebelum memperbarui informasi. Tanpa  
 Tambahkan  
 Memperbarui nilai yang ada akan mengaktifkan pemeriksaan pemicu: 
 Memperbarui usia ke nilai kurang dari 18 menampilkan pesan kesalahan, dan informasi tidak diperbarui. 
 Gunakan blok kode berikut untuk membuat  
  
 SETELAH PEMBARUAN Contoh Pemicu  
 Setiap pembaruan yang berhasil untuk usia data dalam tabel orang juga harus memperbarui nilai rata-rata menengah yang dihitung dalam usia_rata-rata tabel. 
 Buat  
 Memperbarui data yang ada akan mengubah nilai di orang tabel: 
 Memperbarui tabel orang juga memperbarui rata-rata dalam usia_rata-rata tabel. 
 Untuk membuat  
  
 SEBELUM MENGHAPUS Contoh Pemicu  
 Arsipkan data yang dihapus dengan membuat  
 Menghapus data dari tabel orang mengarsipkan data ke person_archive tabel sebelum menghapus: 
 Memasukkan nilai kembali ke orang table menyimpan log data yang dihapus di person_archive tabel: 
  
 Buat  
  
 SETELAH DELETE Contoh Pemicu  
 Buat  
 Menghapus catatan dari tabel orang memperbarui usia_rata-rata tabel dengan rata-rata baru: 
 Tanpa  
 MySQL tidak mendukung beberapa pemicu yang diaktifkan secara bersamaan. Namun, menambahkan beberapa operasi logis ke pemicu yang sama dimungkinkan. Gunakan  
 Pastikan untuk mengubah pembatas default sebelum membuat pemicu dengan beberapa operasi. 
 Buat daftar semua pemicu dalam database dengan: 
 Keluaran menunjukkan daftar semua pemicu, termasuk nama dan isi pernyataan: 
 Informasi lain juga ditampilkan, seperti waktu pembuatan dan pengguna yang membuat pemicu. untuk setiap baris yang dipengaruhi oleh fungsi. 
Hapus Pemicu
 DROP TRIGGER  pernyataan:DROP TRIGGER <trigger name>; 
 DROP TRIGGER IF EXISTS <trigger name>; 
 Buat Contoh Basis Data
 CREATE TABLE person (name varchar(45), age int);INSERT INTO person VALUES ('Matthew', 25), ('Mark', 20);SELECT * FROM person; 
 CREATE TABLE average_age (average double);INSERT INTO average_age SELECT AVG(age) FROM person;SELECT * FROM average_age; 
 CREATE TABLE person_archive (
name varchar(45),
age int,
time timestamp DEFAULT NOW()); 
 Buat Pemicu SEBELUM MASUKKAN
 BEFORE INSERT  pemicu, gunakan:CREATE TRIGGER <trigger name> BEFORE INSERT
ON <table name>
FOR EACH ROW
<trigger body>;BEFORE INSERT  trigger memberikan kontrol atas modifikasi data sebelum melakukan ke tabel database. Memanfaatkan nama untuk konsistensi, memeriksa panjang input, atau menangkap input yang salah dengan BEFORE INSERT  trigger lebih lanjut memberikan batasan nilai sebelum memasukkan data baru.BEFORE INSERT  pemicu untuk memeriksa nilai usia sebelum memasukkan data ke dalam orang tabel:delimiter //
CREATE TRIGGER person_bi BEFORE INSERT
ON person
FOR EACH ROW
IF NEW.age < 18 THEN
SIGNAL SQLSTATE '50001' SET MESSAGE_TEXT = 'Person must be older than 18.';
END IF; //
delimiter ; 
 INSERT INTO person VALUES ('John', 14); 
 Buat Pemicu AFTER INSERT
 AFTER INSERT  pemicu dengan:CREATE TRIGGER <trigger name> AFTER INSERT
ON <table name>
FOR EACH ROW
<trigger body>;AFTER INSERT  trigger berguna ketika baris yang dimasukkan menghasilkan nilai yang diperlukan untuk memperbarui tabel lain.AFTER INSERT  pemicu pada orang tabel untuk memperbarui usia_rata-rata tabel setelah disisipkan:delimiter //
CREATE TRIGGER person_ai AFTER INSERT
ON person
FOR EACH ROW
UPDATE average_age SET average = (SELECT AVG(age) FROM person); //
delimiter ; 
 INSERT INTO person VALUES ('John', 19); 
 Buat Pemicu SEBELUM UPDATE
 BEFORE UPDATE  pemicu dengan:CREATE TRIGGER <trigger name> BEFORE UPDATE
ON <table name>
FOR EACH ROW
<trigger body>;BEFORE UPDATE  pemicu berjalan bersama dengan BEFORE INSERT  pemicu. Jika ada batasan sebelum memasukkan data, batasan harus ada sebelum memperbarui juga.BEFORE UPDATE  pemicu, pemicu pemeriksaan usia mudah dihindari. Tidak ada yang membatasi pengeditan ke nilai yang salah.BEFORE UPDATE  pemicu ke orang tabel dengan isi yang sama dengan BEFORE INSERT  pemicu:delimiter //
CREATE TRIGGER person_bu BEFORE UPDATE
ON person
FOR EACH ROW
IF NEW.age < 18 THEN
SIGNAL SQLSTATE '50002' SET MESSAGE_TEXT = 'Person must be older than 18.';
END IF; //
delimiter ; 
 UPDATE person SET age = 17 WHERE name = 'John'; 
 Buat Pemicu SETELAH UPDATE
 AFTER UPDATE  pemicu:CREATE TRIGGER <trigger name> AFTER UPDATE
ON <table name>
FOR EACH ROW
<trigger body>;AFTER UPDATE  pemicu membantu melacak perubahan yang dilakukan pada data. Paling sering, perubahan apa pun setelah memasukkan informasi juga terjadi setelah memperbarui data.AFTER UPDATE  pemicu untuk memperbarui usia_rata-rata tabel setelah memperbarui baris di orang tabel:delimiter //
CREATE TRIGGER person_au AFTER UPDATE
ON person
FOR EACH ROW
UPDATE average_age SET average = (SELECT AVG(age) FROM person); //
delimiter ; 
 UPDATE person SET age = 21 WHERE name = 'John'; 
 Buat Pemicu SEBELUM DELETE
 BEFORE DELETE  pemicu, gunakan:CREATE TRIGGER <trigger name> BEFORE DELETE
ON <table name>
FOR EACH ROW
<trigger body>;BEFORE DELETE  pemicu sangat penting untuk alasan keamanan. Jika tabel induk memiliki anak yang dilampirkan, pemicu membantu memblokir penghapusan dan mencegah tabel yatim piatu. Pemicu juga memungkinkan pengarsipan data sebelum dihapus.BEFORE DELETE  pemicu di atas meja orang dan masukkan nilainya ke person_archive tabel:delimiter //
CREATE TRIGGER person_bd BEFORE DELETE
ON person
FOR EACH ROW
INSERT INTO person_archive (name, age)
VALUES (OLD.name, OLD.age); //
delimiter ; 
 DELETE FROM person WHERE name = 'John'; 
 INSERT INTO person VALUES ('John', 21); 
 BEFORE DELETE  trigger berguna untuk mencatat setiap upaya perubahan tabel.Buat Pemicu SETELAH DELETE
 AFTER DELETE  pemicu dengan:CREATE TRIGGER <trigger name> AFTER DELETE
ON <table name>
FOR EACH ROW
<trigger body>;AFTER DELETE  pemicu mempertahankan pembaruan informasi yang mengharuskan baris data menghilang sebelum melakukan pembaruan.AFTER DELETE  pemicu di atas meja orang untuk memperbarui usia_rata-rata tabel dengan informasi baru:delimiter //
CREATE TRIGGER person_ad AFTER DELETE
ON person
FOR EACH ROW
UPDATE average_age SET average = (SELECT AVG(person.age) FROM person); //
delimiter ; 
  
 AFTER DELETE  pemicu, informasi tidak diperbarui secara otomatis.Buat Beberapa Pemicu
 BEGIN  dan END  pembatas untuk menunjukkan badan pemicu:CREATE TRIGGER <trigger name> <trigger time > <trigger event>
ON <table name>
FOR EACH ROW
BEGIN
<trigger body>;
END;Tampilkan Pemicu
 SHOW triggers;