MySQL - Sebelum Update Trigger

Pengenalan ke MySQL Sebelum Update Trigger

Halo, para penggemar basis data yang bersemangat! Hari ini, kita akan mendalam ke dunia yang menarik dari MySQL Sebelum Update Triggers. Jangan khawatir jika Anda baru belajar pemrograman; saya akan menjadi panduan ramah Anda dalam perjalanan ini, menjelaskan segala sesuatu secara langkah demi langkah. Pada akhir tutorial ini, Anda akan menciptakan trigger seperti seorang pro!

MySQL - Before Update Trigger

Apa Itu Sebelum Update Trigger?

Imaginasi Anda adalah pengawal keamanan di sebuah galeri seni mewah. Pekerjaan Anda adalah untuk memeriksa tas orang-orang sebelum mereka memasuki ruang pameran. Itu tepat seperti apa yang dilakukan Sebelum Update Trigger di MySQL! Itu adalah jenis program khusus yang berjalan secara otomatis tepat sebelum rekord di basis data Anda akan diupdate. Itu seperti pengawal keamanan pribadi basis data Anda, memastikan bahwa semua hal dalam keadaan rapi sebelum perubahan terjadi.

Sintaks MySQL Sebelum Update Trigger

mari kita mulai dengan struktur dasar dari Sebelum Update Trigger. Jangan khawatir jika itu terlihat sedikit menakutkan pada awalnya; kita akan memecahkannya bersama-sama!

CREATE TRIGGER trigger_name
BEFORE UPDATE ON table_name
FOR EACH ROW
BEGIN
-- Kode trigger Anda masuk di sini
END;

Mari kitaurai mantra ini:

  1. CREATE TRIGGER trigger_name: Ini adalah tempat Anda memberikan nama ke trigger Anda. Pilihlah bijak!
  2. BEFORE UPDATE: Ini memberitahu MySQL untuk menjalankan trigger sebelum update terjadi.
  3. ON table_name: Tentukan tabel mana yang Anda inginkan untuk dipertahankan.
  4. FOR EACH ROW: Ini berarti trigger akan berjalan untuk setiap baris yang sedang diupdate.
  5. BEGIN dan END: Kata kunci ini membungkus kode aktual trigger Anda.

Contoh Sederhana

mari kita buat trigger sederhana yang mencatat saat seseorang mencoba mengubah gaji karyawan. Kita akan menggunakan tabel employees dan buat tabel log yang dinamai salary_changes.

-- Pertama, mari buat tabel kita
CREATE TABLE employees (
id INT PRIMARY KEY,
name VARCHAR(50),
salary DECIMAL(10, 2)
);

CREATE TABLE salary_changes (
id INT AUTO_INCREMENT PRIMARY KEY,
employee_id INT,
old_salary DECIMAL(10, 2),
new_salary DECIMAL(10, 2),
change_date TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);

-- Sekarang, mari buat trigger kita
DELIMITER //
CREATE TRIGGER before_salary_update
BEFORE UPDATE ON employees
FOR EACH ROW
BEGIN
IF OLD.salary != NEW.salary THEN
INSERT INTO salary_changes (employee_id, old_salary, new_salary)
VALUES (OLD.id, OLD.salary, NEW.salary);
END IF;
END;//
DELIMITER ;

mari kita pecahkan ini:

  1. Kita buat dua tabel: employees untuk menyimpan informasi karyawan dan salary_changes untuk mencatat perubahan gaji.
  2. Trigger kita dinamai before_salary_update.
  3. Di dalam trigger, kita memeriksa apakah gaji benar-benar berubah (IF OLD.salary != NEW.salary).
  4. Jika ya, kita memasukkan catatan baru ke dalam tabel salary_changes.
  5. OLD merujuk ke nilai saat ini, dan NEW merujuk ke nilai baru yang akan diatur.

Sebelum Update Trigger Menggunakan Program Klien

Sekarang, mari kita lihat bagaimana kita bisa menggunakan trigger ini dalam kasus dunia nyata. Imaginasi Anda sedang membangun sistem gaji untuk perusahaan kecil. Anda ingin memastikan bahwa semua perubahan gaji dicatat dengan baik untuk tujuan audit.

Ini adalah script Python sederhana yang menghubungkan ke basis data MySQL dan mengupdate gaji karyawan:

import mysql.connector

# Hubungkan ke basis data
db = mysql.connector.connect(
host="localhost",
user="your_username",
password="your_password",
database="your_database"
)

cursor = db.cursor()

# Fungsi untuk mengupdate gaji karyawan
def update_salary(employee_id, new_salary):
sql = "UPDATE employees SET salary = %s WHERE id = %s"
values = (new_salary, employee_id)
cursor.execute(sql, values)
db.commit()
print(f"Gaji diperbarui untuk karyawan {employee_id}")

# mari update gaji karyawan
update_salary(1, 55000)

# Tutup koneksi
db.close()

Ketika Anda menjalankan script ini:

  1. Itu akan menghubungkan ke basis data MySQL Anda.
  2. Fungsi update_salary akan mengupdate gaji karyawan tertentu.
  3. Ketika pernyataan UPDATE dieksekusi, trigger before_salary_update secara otomatis dinyalakan.
  4. Trigger memeriksa apakah gaji berubah dan mencatat perubahan di tabel salary_changes.
  5. Semua ini terjadi sebelum update sebenarnya dimasukkan ke tabel employees.

Memeriksa Kerja Trigger

Setelah menjalankan script, Anda dapat memverifikasi bahwa trigger bekerja dengan mengquery tabel salary_changes:

SELECT * FROM salary_changes;

Anda seharusnya melihat entri baru yang menunjukkan gaji lama dan baru untuk karyawan 1.

Teknik Trigger Tingkat Lanjut

Sekarang Anda telah mengetahui dasar-dasar, mari kita lihat beberapa teknik tingkat lanjut yang Anda dapat gunakan dengan Sebelum Update Triggers.

Validasi Data

Trigger dapat digunakan untuk menegakkan aturan bisnis. Misalnya, katakanlah kita tidak ingin mengizinkan penurunan gaji:

DELIMITER //
CREATE TRIGGER prevent_salary_decrease
BEFORE UPDATE ON employees
FOR EACH ROW
BEGIN
IF NEW.salary < OLD.salary THEN
SIGNAL SQLSTATE '45000'
SET MESSAGE_TEXT = 'Gaji tidak dapat diturunkan';
END IF;
END;//
DELIMITER ;

Trigger ini akan melempar kesalahan jika seseorang mencoba menurunkan gaji karyawan.

Mengubah Nilai NEW

Anda juga dapat menggunakan trigger untuk mengubah data sebelum update:

DELIMITER //
CREATE TRIGGER round_salary
BEFORE UPDATE ON employees
FOR EACH ROW
BEGIN
SET NEW.salary = ROUND(NEW.salary, -3);
END;//
DELIMITER ;

Trigger ini membulatkan gaji baru ke ribuan terdekat sebelum update terjadi.

Praktik dan Pertimbangan Terbaik

  1. Simpan trigger sederhana: Logika kompleks dalam trigger dapat membuat debugging sulit.
  2. Perhatikan kinerja: Trigger berjalan untuk setiap baris yang terpengaruh, jadi mereka dapat memperlambat operasi pada tabel besar.
  3. Hindari loop tak terbatas: Hatikan agar tidak membuat trigger yang dapat memicu dirinya sendiri.
  4. Dokumentasikan trigger: Selalu komentar kode trigger Anda dan perawat dokumentasi tentang trigger apa yang ada dan apa yang mereka lakukan.

Kesimpulan

Selamat! Anda baru saja memulai perjalanan menarik ke dunia MySQL Sebelum Update Triggers. Alat ini yang kuat memungkinkan Anda menambahkan lapisan kendali dan otomatisasi tambahan ke operasi basis data Anda. Ingat, dengan kekuatan yang besar datang tanggung jawab besar - gunakan trigger Anda bijak!

Buatlah latihan, tetap curiga, dan jangan takut untuk mencoba. Siapa tahu? Anda mungkin menjadi ahli basis data berikutnya dalam tim Anda!

Selamat triggering, dan semoga query Anda selalu mengembalikan hasil yang Anda harapkan!

Credits: Image by storyset