GNU/Linux >> Belajar Linux >  >> Cent OS

Cara Menggunakan Pemicu MySQL

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_insert

Atau, 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 setiap baris yang dipengaruhi oleh fungsi.

Hapus Pemicu

Untuk menghapus pemicu, gunakan DROP TRIGGER pernyataan:

DROP TRIGGER <trigger name>;

Atau, gunakan:

DROP TRIGGER IF EXISTS <trigger name>;

Pesan kesalahan tidak ditampilkan karena tidak ada pemicu, jadi tidak ada peringatan yang dicetak.

Buat Contoh Basis Data

Buat database untuk kode contoh pemicu dengan struktur berikut:

1. Buat tabel bernama orang dengan nama dan usia untuk kolom.

CREATE TABLE person (name varchar(45), age int);

Masukkan data sampel ke dalam tabel:

INSERT INTO person VALUES ('Matthew', 25), ('Mark', 20);

Pilih tabel untuk melihat hasilnya:

SELECT * FROM person;

2. Buat tabel bernama usia_rata-rata dengan kolom bernama rata-rata :

CREATE TABLE average_age (average double);

Masukkan nilai usia rata-rata ke dalam tabel:

INSERT INTO average_age SELECT AVG(age) FROM person;

Pilih tabel untuk melihat hasilnya:

SELECT * FROM average_age;

3. Buat tabel bernama person_archive dengan nama , usia , dan waktu kolom:

CREATE TABLE person_archive (
name varchar(45),
age int,
time timestamp DEFAULT NOW());

Buat Pemicu SEBELUM MASUKKAN

Untuk membuat 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.

SEBELUM MASUKKAN Contoh Pemicu

Buat 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 ;

Memasukkan data mengaktifkan pemicu dan memeriksa nilai usia sebelum melakukan informasi:

INSERT INTO person VALUES ('John', 14);

Konsol menampilkan pesan kesalahan deskriptif. Data tidak dimasukkan ke dalam tabel karena pemeriksaan pemicu gagal.

Buat Pemicu AFTER INSERT

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

SETELAH MASUKKAN Contoh Pemicu

Menyisipkan baris baru ke dalam orang tabel tidak secara otomatis memperbarui rata-rata dalam usia_rata-rata meja. Buat 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 ;

Menyisipkan baris baru ke dalam orang tabel mengaktifkan pemicu:

INSERT INTO person VALUES ('John', 19);

Data berhasil dikomit ke orang tabel dan memperbarui usia_rata-rata tabel dengan nilai rata-rata yang benar.

Buat Pemicu SEBELUM UPDATE

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

SEBELUM MEMPERBARUI Contoh Pemicu

Jika ada batasan usia untuk orang tabel sebelum memasukkan data, batasan usia juga harus ada sebelum memperbarui informasi. Tanpa BEFORE UPDATE pemicu, pemicu pemeriksaan usia mudah dihindari. Tidak ada yang membatasi pengeditan ke nilai yang salah.

Tambahkan 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 ;

Memperbarui nilai yang ada akan mengaktifkan pemeriksaan pemicu:

UPDATE person SET age = 17 WHERE name = 'John';

Memperbarui usia ke nilai kurang dari 18 menampilkan pesan kesalahan, dan informasi tidak diperbarui.

Buat Pemicu SETELAH UPDATE

Gunakan blok kode berikut untuk membuat 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.

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 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 ;

Memperbarui data yang ada akan mengubah nilai di orang tabel:

UPDATE person SET age = 21 WHERE name = 'John';

Memperbarui tabel orang juga memperbarui rata-rata dalam usia_rata-rata tabel.

Buat Pemicu SEBELUM DELETE

Untuk membuat 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.

SEBELUM MENGHAPUS Contoh Pemicu

Arsipkan data yang dihapus dengan membuat 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 ;

Menghapus data dari tabel orang mengarsipkan data ke person_archive tabel sebelum menghapus:

DELETE FROM person WHERE name = 'John';

Memasukkan nilai kembali ke orang table menyimpan log data yang dihapus di person_archive tabel:

INSERT INTO person VALUES ('John', 21);

BEFORE DELETE trigger berguna untuk mencatat setiap upaya perubahan tabel.

Buat Pemicu SETELAH DELETE

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

SETELAH DELETE Contoh Pemicu

Buat 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 ;

Menghapus catatan dari tabel orang memperbarui usia_rata-rata tabel dengan rata-rata baru:

Tanpa AFTER DELETE pemicu, informasi tidak diperbarui secara otomatis.

Buat Beberapa Pemicu

MySQL tidak mendukung beberapa pemicu yang diaktifkan secara bersamaan. Namun, menambahkan beberapa operasi logis ke pemicu yang sama dimungkinkan. Gunakan 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;

Pastikan untuk mengubah pembatas default sebelum membuat pemicu dengan beberapa operasi.

Tampilkan Pemicu

Buat daftar semua pemicu dalam database dengan:

SHOW triggers;

Keluaran menunjukkan daftar semua pemicu, termasuk nama dan isi pernyataan:

Informasi lain juga ditampilkan, seperti waktu pembuatan dan pengguna yang membuat pemicu.


Cent OS
  1. Cara menggunakan phpMyAdmin untuk menyalin database MySQL

  2. Cara Menggunakan Garam di Centos 8

  3. Cara Menginstal dan Menggunakan MySQL di Ubuntu 20.04

  1. Cara Membuat Database MySQL di Workbench

  2. Cara Membuat Tabel di MySQL

  3. Cara Memperbaiki Tabel Database Mysql yang Rusak

  1. Cara Memperbaiki Database MySQL

  2. Cara Menggunakan MySQL SHOW TRIGGERS

  3. Cara Menginstal MySQL di CentOS 8