Sebelum memasukkan contoh pemicu mysql

Pelajari tentang Pemicu MySQL dalam tutorial langsung ini dengan contoh. Menjelaskan cara menggunakan CREATE, INSERT, DELETE, dan UPDATE Triggers di MySQL

MySQL TRIGGER adalah objek yang terkait dengan tabel di MySQL. Ini adalah tindakan yang dijalankan sebagai respons terhadap peristiwa yang ditentukan di atas meja

Misalnya, Anda dapat menentukan pemicu untuk dijalankan saat operasi INSERT, UPDATE, atau DELETE terjadi di tabel.

Perlu dicatat bahwa persyaratan utama untuk mengeksekusi pemicu adalah SUPERUSER atau hak akses root dari akun tempat pemicu dijalankan

=> Cek SEMUA Tutorial MySQL Disini

Apa yang Akan Anda Pelajari

Pemicu MySQL

Sebelum memasukkan contoh pemicu mysql

Secara umum, ada 2 jenis Pemicu

  • Pemicu Tingkat Baris. Jenis pemicu ini diaktifkan atau dipanggil untuk setiap penyisipan/pembaruan/penghapusan setiap baris
  • Pemicu Tingkat Pernyataan. Pemicu tingkat pernyataan dipanggil untuk setiap eksekusi pernyataan. Pernyataan mungkin memengaruhi 1 baris atau lebih, tetapi pemicu terkait hanya akan dipanggil sekali. Jenis pemicu ini didukung oleh database SQL seperti Oracle, PL/SQL, dll

MySQL8. 0 hanya mendukung pemicu tingkat baris yang dipanggil untuk setiap penyisipan/pembaruan/penghapusan baris

Sintaksis

Mari kita lihat sintaks untuk mendefinisikan atau membuat TRIGGER di MySQL

CREATE TRIGGER 
trigger_name 
trigger_time 
trigger_event
ON table_name FOR EACH ROW
[trigger_order]
body

trigger_name. Nama unik untuk objek pemicu di dalam tabel

trigger_time. Nilai yang diizinkan adalah SEBELUM & SETELAH – Bidang ini menunjukkan apakah pemicu akan diaktifkan SEBELUM atau SETELAH peristiwa

trigger_event. Apakah peristiwa atau tindakan aktual yang akan mengarah pada pemanggilan pemicu

Nilai yang diizinkan untuk bidang ini adalah

  • MENYISIPKAN. Untuk setiap sisipan baris
  • MEMPERBARUI. Untuk setiap baris modifikasi i. e. pembaruan baris menggunakan pernyataan UPDATE
  • MENGHAPUS. Ketika sebuah baris dihapus dari tabel

nama_tabel. Nama tabel MySQL yang pemicunya ditentukan

trigger_order. Ini adalah bidang opsional dan digunakan untuk menentukan urutan eksekusi pemicu. Ini umumnya digunakan ketika ada beberapa pemicu yang terkait dengan kejadian yang sama – Dalam hal ini, kita dapat menentukan urutan eksekusi

Ini menggunakan sintaks di bawah ini
{IKUTI. PRECEDES} pemicu_lain

Catatan. Jika trigger_body akan berisi banyak pernyataan, kita dapat menggunakan sintaks yang mirip dengan cara kita menggunakannya untuk membuat PROSEDUR TERSIMPAN.

Badan pemicu, dalam hal ini, akan diapit antara perintah BEGIN dan END dan seluruh definisi Pemicu akan berada di antara perintah DELIMITER untuk memiliki beberapa pernyataan yang ditentukan dengan blok BEGIN…END

DELIMITER $$
// Trigger Syntax
BEGIN
	-- Statements
END $$
DELIMITER ;
_

Aplikasi Menggunakan MySQL Triggers

Ada banyak aplikasi pemicu MySQL di kehidupan nyata

  • Memeriksa Integritas data / Penanganan kesalahan. Ini dilakukan terutama dengan menggunakan SEBELUM pemicu - misalkan Anda ingin memeriksa apakah nilai kolom yang dimasukkan mengikuti sintaks yang benar atau berada dalam rentang tertentu, dll.
  • Membuat entri log perubahan. Pemicu banyak digunakan untuk membuat jejak audit atau log perubahan aktivitas dalam database atau tabel. Misalnya, jika Anda ingin melacak semua pembaruan pada tabel, maka kita dapat membuat pemicu UPDATE pada tabel tersebut yang akan membuat entri lain dalam audit .
  • Turunkan / Perbarui bidang data tambahan. Kadang-kadang mungkin diperlukan untuk memperbarui satu atau lebih kolom sebagai respons terhadap UPDATE atau INSERT asli. Pemicu dapat berguna dalam situasi tersebut
  • Replikasi data di berbagai tabel. Terkadang, kita mungkin ingin menyisipkan/memperbarui data ke tabel lain sebagai hasil dari penyisipan atau pembaruan data di tabel lain. Dalam kasus seperti itu, kami dapat menentukan pemicu untuk mencapai pembaruan data tabel yang diinginkan

Uji Data

Nama tabel – item_inventaris
Atribut – nama – VARCHAR(30), harga – DECIMAL(5,2), jumlah INTEGER
Skrip Pembuatan Tabel

CREATE TABLE item_inventory (id SMALLINT(5) NOT NULL AUTO_INCREMENT PRIMARY KEY, 
name VARCHAR(30), price DECIMAL(5,2), quantity INTEGER);

BUAT PEMICU di MySQL

Mari kita lihat beberapa contoh penggunaan trigger MySQL CREATE

PEMICU INSERT MySQL

Kita dapat membuat pemicu untuk baris INSERTS dalam tabel yang sudah ada. Ada 2 jenis trigger tersebut yaitu AFTER INSERT dan BEFORE INSERT

SETELAH MASUKKAN PEMICU

Kami akan membuat pemicu SETELAH INSERT pada tabel yang disebutkan dalam data pengujian – item_inventory

Mari buat tabel audit inventaris terlebih dahulu

CREATE TABLE item_inventory_audit (id SMALLINT(5) NOT NULL AUTO_INCREMENT PRIMARY KEY, 
item_id VARCHAR(30), price DECIMAL(5,2), created_on DATETIME(6), quantity INTEGER);

Kami akan membuat TRIGGER untuk menambahkan entri di tabel item_inventory_audit setelah setiap INSERT di tabel item_inventory

CREATE TRIGGER trigger_tutorial.trigger_item_insert_audit
AFTER INSERT
ON trigger_tutorial.item_inventory
FOR EACH ROW
INSERT INTO trigger_tutorial.item_inventory_audit(item_id,price,created_on,quantity) VALUES(new.item_id, new.price, now(), new.quantity);
_

Dalam definisi TRIGGER di atas

  • Kami telah membuat pemicu bernama – trigger_item_insert_audit di database – trigger_tutorial
  • Pemicu dibuat di atas meja – item_inventory UNTUK SETIAP INSERT
  • Badan pemicu – berisi pernyataan INSERT yang berarti bahwa setelah INSERT baris dalam tabel item_inventory, baris baru akan disisipkan dalam tabel item_inventory_audit

Kami juga dapat memeriksa apakah pemicu berhasil dibuat dengan menavigasi ke folder pemicu di tabel masing-masing pada klien MySQL GUI seperti MySQL Workbench

Sebelum memasukkan contoh pemicu mysql

Mari kita coba jalankan ini

Kami akan INSERT record di tabel item_inventory

INSERT INTO trigger_tutorial.item_inventory(name, price, quantity) VALUES("Henko Washing Powder",150.50,100);

Kita sekarang dapat memeriksa apakah catatan terkait dalam tabel item_inventory_audit telah dibuat atau belum

SELECT * FROM trigger_tutorial.item_inventory_audit;
_

Sebelum memasukkan contoh pemicu mysql

SEBELUM MEMASUKKAN PEMICU

Pemicu Before INSERT akan dipanggil SEBELUM setiap baris INSERT pada tabel target

Sintaks untuk pembuatan Trigger tetap sama, seperti yang kita lihat di bagian sebelumnya

BEFORE INSERT dapat digunakan ketika Anda ingin memperbarui nilai yang dimasukkan ke nilai lain atau default, dll

DELIMITER $$
CREATE TRIGGER trigger_tutorial.trigger_item_before_insert
BEFORE INSERT
ON trigger_tutorial.item_inventory
FOR EACH ROW
BEGIN
IF new.price > 100 THEN SET new.price = 1.02 * new.price;
END IF;
END $$ 
DELIMITER ;

Misalkan kita ingin harga di tabel audit menjadi 2% lebih banyak dari data harga aktual yang dimasukkan

Di sini, kami telah membuat pemicu BEFORE INSERT, yang akan mengubah harga baris baru yang ditambahkan ke 1. 02 kali lipat dari harga aslinya

INSERT INTO trigger_tutorial.item_inventory(name, price, quantity) VALUES("Tomato Ketchup",120,20);

SELECT * FROM trigger_tutorial.item_inventory_audit where item_id=2;
_

Sebelum memasukkan contoh pemicu mysql

PEMICU PEMBARUAN MySQL

Kita dapat membuat trigger untuk baris UPDATE dari tabel yang sudah ada. Mirip dengan INSERT, untuk UPDATE juga, kita dapat memiliki 2 jenis pemicu yaitu. e. SEBELUM PEMBARUAN dan SETELAH PEMBARUAN. Mari kita lihat contoh untuk kedua kasus tersebut

Dalam pemicu UPDATE – kita dapat mengambil nilai BARU dan LAMA untuk item yang diperbarui masing-masing menggunakan kata kunci baru dan lama

Mari kita buat Pemicu BEFORE UPDATE yang akan mengatur jumlah yang akan diperbarui di baris BARU menjadi selisih antara nilai LAMA dan BARU. Contoh, jika seseorang memperbarui kolom kuantitas pada tabel yang ada, maka

  • Jika baru. kuantitas < tua. kuantitas => atur baru. kuantitas = tua. kuantitas – baru. kuantitas
  • Lain baru. kuantitas = 0
DELIMITER $$
CREATE TRIGGER trigger_tutorial.trigger_item_before_update
BEFORE UPDATE
ON trigger_tutorial.item_inventory
FOR EACH ROW
BEGIN
	IF old.quantity &gt; new.quantity THEN SET new.quantity = old.quantity - new.quantity;
    ELSE SET new.quantity = 0;
    END IF;
END $$ 
DELIMITER ;
_

Mari kita juga membuat Pemicu SETELAH PEMBARUAN yang akan MENYISIPKAN baris baru dalam tabel audit dengan nilai kolom jumlah baru yang dihitung dalam PEMICU SEBELUM PEMBARUAN seperti yang ditunjukkan di atas

DELIMITER $$
// Trigger Syntax
BEGIN
	-- Statements
END $$
DELIMITER ;
_0

Sekarang mari kita pahami ini dengan bantuan sebuah contoh

Misalkan kita melakukan INSERT awal di tabel item_inventory menggunakan kueri di bawah ini

DELIMITER $$
// Trigger Syntax
BEGIN
	-- Statements
END $$
DELIMITER ;
_6

Ini akan memicu masing-masing Pemicu SEBELUM INSERT dan SETELAH INSERT

Sekarang mari kita jalankan UPDATE untuk Item ini (yang menyandang ID item – 2)

DELIMITER $$
// Trigger Syntax
BEGIN
	-- Statements
END $$
DELIMITER ;
_7

Sekarang urutan eksekusi pemicu untuk UPDATE adalah

=> PERNYATAAN PEMBARUAN => SEBELUM PEMICU PEMBARUAN => SETELAH PEMICU PEMBARUAN

Logika di BEFORE UPDATE TRIGGER – akan memperbarui jumlah baris baru ke selisih nilai baru dan asli

Karena kami memperbarui kuantitas menjadi 20 dan nilai aslinya adalah 60, nilai sebenarnya yang akan dimasukkan ke dalam tabel adalah 40

Mari lakukan SELECT pada tabel inventory_audit untuk memverifikasi hasilnya

DELIMITER $$
// Trigger Syntax
BEGIN
	-- Statements
END $$
DELIMITER ;
_1

Sebelum memasukkan contoh pemicu mysql

Baris pertama yang Anda lihat di atas ditambahkan oleh INSERT Trigger

Baris kedua ditambahkan sebagai bagian dari UPDATE

  1. Jumlah DIPERBARUI = 20
  2. BEFORE UPDATE TRIGGER => ubah baru. jumlah = 60 – 20 => 40
  3. AFTER UPDATE TRIGGER => Menyisipkan baris dalam audit_table dengan jumlah yang diperbarui – i. dan 40

PEMICU HAPUS MySQL

Untuk menghapus atau menjatuhkan MySQL TRIGGER, kita dapat menggunakan perintah DROP TRIGGER

Sintaksis

DELIMITER $$
// Trigger Syntax
BEGIN
	-- Statements
END $$
DELIMITER ;
_8

Mari kita lihat contoh perintah

Misalkan kita ingin menghapus trigger BEFORE INSERT yang kita buat di bagian sebelumnya. Pemicunya dinamai sebagai trigger_tutorial. trigger_item_before_insert

Mari gunakan perintah DROP untuk menghapus ini

DELIMITER $$
// Trigger Syntax
BEGIN
	-- Statements
END $$
DELIMITER ;
_2

Setelah pemicu dihapus, tindakan apa pun yang terkait dengan pemicu akan batal dan tidak ada peristiwa seperti itu yang akan dimunculkan

Daftar Semua Pemicu Terkait Dengan Tabel

Untuk mencantumkan semua pemicu yang terkait dengan skema atau database, Anda dapat menggunakan perintah SHOW TRIGGER

Misalnya. Jika kita ingin mencantumkan semua pemicu dalam skema trigger_tutorial, maka kita dapat menggunakan perintah di bawah ini.

DELIMITER $$
// Trigger Syntax
BEGIN
	-- Statements
END $$
DELIMITER ;
_3

//Keluaran

Anda dapat melihat banyak detail berbeda terkait dengan berbagai pemicu yang tersedia dalam skema

Beberapa detail kolom seperti itu ditunjukkan di bawah ini

Sebelum memasukkan contoh pemicu mysql

Membuat Pemicu Menggunakan MySQL GUI Client – ​​MySQL Workbench

Mirip dengan membuat menggunakan acara CREATE TRIGGER, pemicu juga dapat dibuat menggunakan Klien GUI MySQL seperti MySQL Workbench

Mari kita lihat langkah-langkah untuk membuat Trigger BEFORE INSERT menggunakan MySQL Workbench

#1) Klik kanan pada nama tabel tempat pemicu perlu dibuat

Sebelum memasukkan contoh pemicu mysql

#2) Pilih opsi “Ubah Tabel”

Sebelum memasukkan contoh pemicu mysql

#3) Buat "Tab Pemicu"

Sebelum memasukkan contoh pemicu mysql

#4) Klik tanda '+' di sebelah bagian BEFORE INSERT untuk membuat pemicu

Sebelum memasukkan contoh pemicu mysql

#5) Di sisi kanan, perbarui/edit definisi pemicu. Kami akan menambahkan pernyataan IF untuk menetapkan harga = 1. 02 * harga untuk harga > 100

DELIMITER $$
// Trigger Syntax
BEGIN
	-- Statements
END $$
DELIMITER ;
_4

Sebelum memasukkan contoh pemicu mysql

#6) Klik "Terapkan" untuk Menyimpan Pemicu

Sebelum memasukkan contoh pemicu mysql

Sebelum memasukkan contoh pemicu mysql

Sebelum memasukkan contoh pemicu mysql

#7) Pemicu sekarang dibuat. Untuk memverifikasi, Anda dapat menjalankan perintah SHOW TRIGGERS dan memvalidasi jika pemicu yang baru dibuat ditampilkan

DELIMITER $$
// Trigger Syntax
BEGIN
	-- Statements
END $$
DELIMITER ;
_3

Sebelum memasukkan contoh pemicu mysql

Mirip dengan BEFORE INSERT, kita dapat menambah/menghapus jenis pemicu lain seperti SETELAH INSERT, SEBELUM/SETELAH UPDATE, SEBELUM/SETELAH DELETE melalui MySQL Workbench GUI Client juga

Penanganan Kesalahan Selama Eksekusi Pemicu

Penting untuk memahami bagaimana MySQL menangani kesalahan yang terjadi selama eksekusi pemicu

  • Untuk pemicu yang dijalankan SEBELUM atau SETELAH operasi – Jika eksekusi pemicu gagal, operasi pada baris tidak akan dilakukan
  • Untuk pemicu yang ditentukan untuk operasi SEBELUM dan SETELAH - Jika pemicu SEBELUM gagal, maka operasi akan gagal dan pemicu SETELAH tidak akan dipanggil

Keuntungan Menggunakan Pemicu

  • Pengembangan aplikasi yang lebih cepat dan penggunaan kembali kode. Karena trigger diberi nama objek di dalam database, setelah dibuat mereka dapat digunakan kembali dan juga dapat diubah dengan mudah sesuai kebutuhan bisnis
  • Peningkatan kinerja. Semua aturan yang ditentukan dalam pemicu dijalankan di server sebelum hasilnya dikembalikan. Ini mencegah pengulangan bolak-balik antara klien dan server

Pertanyaan yang Sering Diajukan

T #1) Apa itu Pemicu di MySQL?

Menjawab. Sederhananya, Pemicu di MySQL adalah sejenis tindakan sebagai respons terhadap peristiwa apa pun yang ditentukan

Misalnya, Misalkan kita ingin melakukan beberapa tindakan (berupa mengeksekusi beberapa pernyataan/memasukkan data di tabel lain) pada INSERTING atau UPDATING baris di beberapa tabel lain, .

T #2) Bagaimana Pemicu diterapkan di MySQL?

Jawaban. Pemicu diberi nama objek dalam MySQL DATABASE i. e. Pemicu dikaitkan dengan tabel di database MySQL

Pemicu dapat dibuat menggunakan perintah CREATE TRIGGER dan dapat berupa salah satu dari 2 jenis

  • Tingkat baris. Ini disebut untuk setiap baris. Misalnya, pada setiap INSERT baris dalam tabel.
  • Tingkat pernyataan. Ini dipanggil sekali selama eksekusi pernyataan. Pernyataan tersebut mungkin memengaruhi satu atau beberapa baris tetapi pemicu terkait hanya akan dipanggil sekali

T #3) Bisakah ada Beberapa Pemicu yang terkait dengan peristiwa yang sama?

Jawab. Ya, tidak apa-apa memiliki beberapa pemicu yang terkait dengan peristiwa yang sama. Misalnya, kita dapat menentukan beberapa pemicu untuk dieksekusi ketika sebuah baris DIMASUKKAN ke dalam tabel.

Urutan eksekusi pemicu secara default adalah urutan pembuatan Pemicu. Urutan ini juga dapat diubah, menggunakan bidang trigger_order saat membuat pemicu

T #4) Apakah mungkin memperbarui pemicu yang ada?

Menjawab. Di MySQL, tidak ada pernyataan untuk memperbarui atau mengubah pemicu yang ada. Jika setelah pembuatan pemicu, Anda perlu mengubah pemicunya. Anda dapat DROP trigger yang ada menggunakan perintah DROP TRIGGER dan membuat yang baru dengan nama yang sama

Kesimpulan

Dalam tutorial ini, kita belajar tentang konsep menggunakan TRIGGERS di MySQL. Pemicu memungkinkan pengguna untuk menentukan tindakan khusus sebagai respons terhadap peristiwa yang telah ditentukan sebelumnya seperti INSERT atau UPDATE dari baris di tabel lain, dll.

Pemicu sangat membantu dalam berbagai kasus penggunaan, seperti

  • Mengikuti validasi nilai/data yang didukung
  • Penanganan kesalahan
  • Mengaktifkan log audit untuk semua peristiwa perubahan yang terjadi pada tabel tertentu

Pemicu juga sebagian besar mendukung penggunaan kembali kode dan mengoptimalkan kinerja dengan mengurangi panggilan jaringan bolak-balik untuk pembaruan individual

Bagaimana Anda menulis pemicu sebelum memasukkan?

Parameter sintaks pemicu BEFORE INSERT dapat dijelaskan seperti di bawah ini. .
Pertama, kita akan menentukan nama trigger yang ingin kita buat. .
Kedua, kami akan menentukan waktu tindakan pemicu, yang seharusnya BEFORE INSERT. .
Ketiga, kami akan menentukan nama tabel yang terkait dengan pemicu

Bagaimana Anda bisa membuat pemicu sebelum dan sesudah saat menyisipkan kueri?

Pertama, tentukan nama pemicu yang ingin Anda buat di klausa CREATE TRIGGER. Kedua, gunakan klausa BEFORE INSERT untuk menentukan waktu untuk memanggil pemicu. Ketiga, tentukan nama tabel yang dikaitkan dengan pemicu setelah kata kunci ON

Bagaimana cara membuat pemicu setelah dimasukkan di MySQL?

Pertama, kita akan menentukan nama pemicu yang ingin kita buat. Itu harus unik dalam skema. Kedua, kita akan menentukan waktu tindakan pemicu, yang seharusnya menjadi klausa SETELAH INSERT untuk memanggil pemicu. .
BUAT TRIGGER trigger_name
SETELAH INSERT
PADA table_name UNTUK SETIAP BARIS
trigger_body ;

Kapan menggunakan pemicu sebelum dan sesudah di MySQL?

Biasanya, penggunaan pemicu Sebelum adalah untuk melakukan validasi sebelum menerima data ke tabel dan memeriksa nilainya sebelum menghapusnya dari tabel. Namun, biasanya penggunaan After trigger adalah untuk memperbarui data dalam tabel karena terjadi perubahan