CodeGym /Kurslar /SQL SELF /Trigger-lərlə tanışlıq

Trigger-lərlə tanışlıq

SQL SELF
Səviyyə, Dərs
Mövcuddur

Trigger (və ya trigger) — bu, verilənlər bazasında müəyyən hadisələrə reaksiya verən bir növ "callback" kimidir. Başqa sözlə, trigger — bu, INSERT, UPDATE və ya DELETE kimi əməliyyatlar icra olunanda avtomatik reaksiya verən bir mexanizmdir.

Təsəvvür elə ki, sənin ağıllı bir köməkçin var və o, sənin əvəzinə bəzi işləri görür. Məsələn, hər dəfə yeni bir tələbə haqqında qeyd əlavə edəndə, köməkçi avtomatik olaraq son dəyişiklik tarixini yeniləyir. Verilənlər bazasında trigger də eyni cür işləyir: o, hadisələri "dinləyir" və proqramlaşdırılmış reaksiyanı işə salır.

Trigger iki şeyi birləşdirir:

  1. Hadisə: cədvəldə nəsə baş verir (məsələn, qeyd əlavə olunur).
  2. Trigger-funksiyası: hadisə baş verəndə işləyən kod.
Vacibdir:

trigger funksiyasız mövcud ola bilməz. Funksiya trigger işə düşəndə nə etmək lazım olduğunu müəyyən edir.

Trigger-lərin istifadə nümunələri

Gəlin, trigger-lərin faydalı ola biləcəyi bir neçə vəziyyətə baxaq.

  1. Məlumatların avtomatik yenilənməsi

İstəyirsən ki, tələbələr haqqında qeydlərin saxlandığı cədvəldə last_modified adlı bir sahə olsun və bu sahə hər dəfə qeyd dəyişəndə avtomatik yenilənsin. Hər dəfə bu sahəni əl ilə yeniləmək əvəzinə, trigger yaradıb bu işi ona həvalə edə bilərsən.

  1. Dəyişikliklərin loglanması

İstəyirsən ki, kim və nə vaxt cədvəldəki məlumatları dəyişir, onu izləyə biləsən. Trigger hər dəfə məlumat dəyişəndə avtomatik olaraq audit (log) cədvəlinə qeyd əlavə edə bilər.

  1. Məlumatların yoxlanılması

Cədvələ əlavə olunan məlumatlar müəyyən qaydalara uyğun olmalıdırsa (məsələn, tələbənin yaşı 18-dən böyük olmalıdır), trigger məlumatlar əlavə olunmazdan əvvəl onları yoxlaya bilər.

  1. Avtomatik hesablamalar

orders cədvəlində sifarişləri saxlayırsan və hər dəfə yeni sifariş əlavə olunanda müştərinin ümumi alış məbləğini yeniləmək lazımdır. Bunu əl ilə etmək əvəzinə, trigger avtomatik olaraq məbləği yeniləyə bilər.

Trigger-ləri nə vaxt istifadə etməli

Artıq onların imkanlarını bildiyimizə görə, gəlin, trigger-ləri həqiqətən nə vaxt istifadə etməyə dəyər, onu müzakirə edək.

Loglama və audit: trigger-lər audit qeydləri yaratmaq üçün idealdır, beləliklə, vacib cədvəllərdəki dəyişiklikləri izləyə bilərsən.

Məlumatların bütövlüyünü qorumaq: məsələn, bazadan kursu siləndə, trigger avtomatik olaraq həmin kursla bağlı bütün tələbələri də silə bilər ki, "asılı" məlumatlar qalmasın.

Təkrarlanan tapşırıqların avtomatlaşdırılması: bu tapşırıqlara hesablama dəyərlərinin yenilənməsi, aqreqasiya olunmuş məlumatların yenilənməsi və s. daxildir.

Biznes-məntiqin DB-də reallaşdırılması: təkcə tətbiq koduna güvənmək əvəzinə, məntiqin bir hissəsini verilənlər bazasına köçürmək olar.

Trigger-lərin üstünlükləri

Yəqin artıq başa düşdün ki, trigger-lər güclü bir alətdir. Onlar nə verir:

Avtomatlaşdırma: minimum insan müdaxiləsi. Məsələn, məlumatları dəyişən istifadəçilərin izlənməsi avtomatik baş verir.

Kodun təkrarlanmasının azalması: inkişafçılar hər tətbiqdə yeniləmə və ya yoxlama məntiqini yazmaq əvəzinə, onu DB-yə yerləşdirə bilərik.

Məlumatların bütövlüyünün təminatı: trigger əlavə qoruma qatıdır ki, məlumatlar həmişə düzgün olsun.

Trigger-lərin mənfi tərəfləri

Təbii ki, hər bir alət kimi, trigger-lərin də mənfi tərəfləri var. Gəlin, onların "qara tərəfinə" baxaq:

  • Debug-un çətinliyi: trigger-lər "arxa planda" işləyir. Əgər gözlədiyin kimi işləmirsə, onları debug etmək çətin ola bilər.

  • Performans problemləri ola bilər: trigger çox mürəkkəbdirsə və ya çox tez-tez çağırılırsa, SQL-sorğuların icrasını ləngidə bilər.

  • Gizli məntiq: biznes-məntiq trigger-lərdə "basdırılıbsa", inkişafçılar üçün DB-də nə baş verdiyini anlamaq çətinləşir.

Real istifadə ssenariləri

Nümunə 1: Dəyişikliklərin loglanması

Tutaq ki, students cədvəlin var və orada tələbələr haqqında məlumat saxlanılır. Qeydlərdəki dəyişiklikləri izləmək istəyirsən. Bunun üçün trigger hər dəfə tələbə haqqında məlumat dəyişəndə audit_log cədvəlinə qeyd əlavə edəcək.

Nümunə 2: Avtomatik yenilənmə

students cədvəlində last_modified sütunu var. İstəyirsən ki, tələbə haqqında məlumat dəyişəndə bu dəyər avtomatik yenilənsin. Bunu update-dən sonra işə düşən trigger ilə etmək olar.

2
Tapşırıq
SQL SELF, səviyyə, dərs
Bağlanıb
Dəyişən tiplərinin müəyyənləşdirilməsi və loga yazılması
Dəyişən tiplərinin müəyyənləşdirilməsi və loga yazılması
Şərhlər
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION