MySQL - Sebelum Update Trigger

Pengenalan kepada MySQL Sebelum Update Trigger

Hai, 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 panduan ini, Anda akan dapat membuat trigger seperti seorang ahli!

MySQL - Before Update Trigger

Apa Itu Sebelum Update Trigger?

Bayangkan Anda adalah pengawal keamanan di galeri seni yang mewah. Tugas Anda adalah untuk memeriksa tas orang-orang sebelum mereka memasuki ruangan pameran. Itu tepat seperti apa yang dilakukan Sebelum Update Trigger di MySQL! Itu adalah jenis program khusus yang berjalan secara otomatis sebelum rekord di basis data Anda即将 diubah. 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 Sebelum Update Trigger. Jangan khawatir jika itu terlihat sedikit menakutkan pada awal; kita akan membongkar itu bersama-sama!

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

mari kita dekripsi mantra ini:

  1. CREATE TRIGGER trigger_name: Ini adalah tempat Anda memberi 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 inginjaga.
  4. FOR EACH ROW: Ini berarti trigger akan menjalankan untuk setiap baris yang sedang diperbarui.
  5. BEGIN dan END: Kata kunci ini membungkus kode yang sebenarnya di dalam trigger Anda.

Contoh Sederhana

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

-- Pertama-tama, mari kita 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 kita 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 kitaongongkan ini:

  1. Kita membuat 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 itu benar, 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. Bayangkan Anda sedang membuat sistem gaji untuk perusahaan kecil. Anda ingin memastikan bahwa semua perubahan gaji dicatat dengan benar untuk tujuan audit.

Berikut adalah skrip Python sederhana yang terhubung ke basis data MySQL dan memperbarui gaji karyawan:

import mysql.connector

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

cursor = db.cursor()

# Fungsi untuk memperbarui 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 kita perbarui gaji karyawan
update_salary(1, 55000)

# Tutup koneksi
db.close()

Ketika Anda menjalankan skrip ini:

  1. Itu akan terhubung ke basis data MySQL Anda.
  2. Fungsi update_salary akan memperbarui 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 perubahan sebenarnya dimasukkan ke tabel employees.

Memeriksa Kerja Trigger

Setelah menjalankan skrip, Anda dapat memeriksa apakah trigger bekerja dengan mengquery tabel salary_changes:

SELECT * FROM salary_changes;

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

Teknik Trigger Tingkat Lanjut

Sekarang Anda sudah menguasai dasar-dasar, mari kita lihat beberapa teknik tingkat lanjut yang Anda bisa gunakan dengan Sebelum Update Triggers.

Validasi Data

Trigger dapat digunakan untuk menegakkan aturan bisnis. Misalnya, katakanlah Anda tidak ingin memperbolehkan 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 memberikan kesalahan jika seseorang mencoba menurunkan gaji karyawan.

Mengubah Nilai NEW

Anda juga bisa menggunakan trigger untuk mengubah data sebelum itu diperbarui:

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

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

Praktek dan Pertimbangan Terbaik

  1. Simpan trigger sederhana: Logika kompleks di trigger dapat membuat debugging sulit.
  2. Perhatikan kinerja: Trigger menjalankan untuk setiap baris yang terpengaruh, jadi mereka bisa memperlambat operasi pada tabel besar.
  3. Hindari loop tak terbatas: Hatikan agar Anda tidak membuat trigger yang dapat memicu dirinya sendiri.
  4. Dokumentasikan trigger Anda: 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 menambah lapisan kontrol dan otomatisasi tambahan ke operasi basis data Anda. Ingat, dengan kekuatan yang besar datang tanggung jawab yang besar - gunakan trigger Anda bijak!

Sekarang Anda terus melanjutkan perjalanan basis data Anda, Anda akan menemukan banyak cara kreatif untuk menggunakan trigger untuk memecahkan masalah dunia nyata. Terus latih, tetap bersemangat, dan jangan takut untuk mencoba. Siapa tahu? Anda mungkin saja menjadi ahli basis data tim Anda!

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

Credits: Image by storyset