Triggerlar saqlangan protseduralar turlaridan biridir. Ularning bajarilishi jadvalda ma'lumotlarni manipulyatsiya qilish tili (DML) bayonoti bajarilganda sodir bo'ladi. Triggerlar ma'lumotlar yaxlitligini tekshirish va tranzaktsiyalarni qaytarish uchun ishlatiladi.
Trigger - kompilyatsiya qilingan SQL protsedurasi bo'lib, uning bajarilishi relyatsion ma'lumotlar bazasida ma'lum hodisalar ro'y berishi bilan belgilanadi. Triggerlardan foydalanish, asosan, ma'lumotlar bazasi foydalanuvchilari uchun juda qulaydir. Biroq, ulardan foydalanish ko'pincha kiritish-chiqarish operatsiyalari uchun qo'shimcha resurs xarajatlari bilan bog'liq. Agar saqlangan protseduralar yoki ilovalar yordamida bir xil natijalarga erishish mumkin bo'lsa (resurslarning kamroq sarflanishi bilan), triggerlar mos kelmaydi.
Triggerlar ma'lumotlar bazasidagi ma'lumotlarning yaxlitligini saqlash uchun ishlatiladigan maxsus SQL server vositasidir. Butunlik cheklovlari, qoidalar va standart sozlamalar har doim ham kerakli darajadagi funksionallikni ta'minlamasligi mumkin. Ko'pincha ularning haqiqiy va haqiqiy bo'lishini ta'minlash uchun ma'lumotlarni tekshirishning murakkab algoritmlarini amalga oshirish kerak. Bundan tashqari, kerak bo'lganda tegishli ma'lumotlarni o'zgartirish uchun jadval qiymatlaridagi o'zgarishlarni kuzatish kerak bo'ladi. Triggerlarni barcha amallar qoidalar, standart qiymatlar va hokazolar bo'yicha bajarilgandan so'ng harakatga keladigan bir turdagi filtrlar deb hisoblash mumkin.
Trigger - bu triggerlar bilan bog'liq bo'lgan jadvallardagi ma'lumotlarni o'zgartirishga harakat qilganda server tomonidan avtomatik ravishda ishga tushiriladigan saqlangan protseduraning maxsus turi. Har bir trigger ma'lum bir jadvalga bog'langan. U amalga oshiradigan barcha ma'lumotlar o'zgarishlari bitta tranzaksiya sifatida ko'rib chiqiladi. Agar xato yoki ma'lumotlar yaxlitligi buzilganligi aniqlansa, tranzaksiya orqaga qaytariladi. Shuning uchun o'zgartirishlar taqiqlanadi. Trigger tomonidan allaqachon kiritilgan har qanday o'zgarishlar ham bekor qilinadi.
Faqat ma'lumotlar bazasi egasi trigger yaratadi. Ushbu cheklash jadvallar tuzilishidagi tasodifiy o'zgarishlarni, ular bilan boshqa ob'ektlarni ulash usullarini va hokazolarni oldini olishga imkon beradi.
Trigger juda foydali va ayni paytda xavfli vositadir. Shunday qilib, uning ishining noto'g'ri mantig'i bilan siz butun ma'lumotlar bazasini osongina yo'q qilishingiz mumkin, shuning uchun triggerlarni juda ehtiyotkorlik bilan tuzatish kerak.
Oddiy pastki dasturdan farqli o'laroq, trigger har bir hodisada bevosita bajariladi. tetik hodisasi, bundan tashqari, unda hech qanday dalil yo'q. Uni harakatga keltirish ba'zan tetikni yoqish deb ataladi. Triggerlar quyidagi maqsadlarga erishadilar:
kiritilgan ma'lumotlarni tekshirish va jadvalda o'rnatilgan yaxlitlik cheklovlari bilan ta'minlash qiyin, agar imkonsiz bo'lsa, murakkab ma'lumotlar yaxlitligi cheklovlarini amalga oshirish;
ma'lum bir tarzda amalga oshirilgan jadvalni yangilashda muayyan harakatlarni bajarish zarurligini eslatuvchi ogohlantirishlar berish;
kiritilgan o'zgarishlar va ularni amalga oshirgan shaxslar to'g'risidagi ma'lumotlarni qayd etish orqali auditorlik ma'lumotlarini to'plash;
replikatsiyani qo'llab-quvvatlash.
CREATE TRIGGER buyrug'ining asosiy formati quyida ko'rsatilgan:
<Определение_триггера>::= TRIGGER trigger_name OLDINDAN YARATING | KEYIN<триггерное_событие>ON<имя_таблицы> <тело_триггера>
hodisalarni tetiklash jadvalga qatorlarni qo'shish, o'chirish va yangilashdan iborat. Ikkinchi holda, uchun tetik hodisasi maxsus jadval ustunlari nomlarini belgilashingiz mumkin. Triggerning boshlanish vaqti BEFORE (trigger u bilan bog'liq hodisalar bajarilishidan oldin ishlaydi) yoki KEYIN (ular bajarilgandan keyin) kalit so'zlari yordamida aniqlanadi.
Trigger tomonidan bajarilishi kerak bo'lgan harakatlar ma'lum bir hodisa bilan qamrab olingan har bir qator uchun (HAR QATIR UCHUN) yoki har bir hodisa uchun faqat bir marta (HAR BAYoT UCHUN) o'rnatiladi.
Belgilanish <список_старых_или_новых_псевдонимов> eski yoki yangi qator (ESKI / YANGI) yoki eski yoki yangi jadval (ESKIR JADVAL / YANGI TABLE) kabi komponentlarga ishora qiladi. Ko'rinib turibdiki, eski qiymatlar hodisalarni kiritish uchun qo'llanilmaydi va yangilari voqealarni o'chirish uchun qo'llanilmaydi.
To'g'ri ishlatilsa, tetiklar juda kuchli mexanizm bo'lishi mumkin. Ularning asosiy afzalligi shundaki, standart funktsiyalar ma'lumotlar bazasi ichida saqlanadi va har safar yangilanganda doimiy ravishda faollashtiriladi. Bu ilovalarni sezilarli darajada soddalashtirishi mumkin. Shunga qaramay, triggerga xos bo'lgan kamchiliklarni ham ta'kidlash kerak:
murakkablik: ba'zi funktsiyalar ma'lumotlar bazasiga ko'chirilganda, uni loyihalash, amalga oshirish va boshqarish vazifalari murakkablashadi;
Yashirin funksionallik: Baʼzi funksiyalarni maʼlumotlar bazasiga koʻchirish va uni bir yoki bir nechta trigger sifatida saqlash baʼzan baʼzi funksiyalarni foydalanuvchidan yashiradi. Bu uning ishini ma'lum darajada soddalashtirgan bo'lsa-da, afsuski, bu ko'zda tutilmagan, potentsial istalmagan va zararli yon ta'sirlarni keltirib chiqarishi mumkin, chunki bu holda foydalanuvchi ma'lumotlar bazasida sodir bo'ladigan barcha jarayonlarni nazorat qila olmaydi;
ishlash ta'siri: ma'lumotlar bazasi holatini o'zgartirish bo'yicha har bir buyruqni bajarishdan oldin, DBMS ushbu buyruq uchun triggerni ishga tushirish kerakligini aniqlash uchun trigger holatini tekshirishi kerak. Bunday hisob-kitoblarni amalga oshirish DBMSning umumiy ishlashiga ta'sir qiladi va eng yuqori yuklanish vaqtida uning pasayishi ayniqsa sezilarli bo'lishi mumkin. Shubhasiz, triggerlar soni ortishi bilan bunday operatsiyalar bilan bog'liq bo'lgan qo'shimcha xarajatlar ham oshadi.
Noto'g'ri yozilgan triggerlar jiddiy muammolarga olib kelishi mumkin, masalan, "o'lik" qulflarning paydo bo'lishi. Triggerlar uzoq vaqt davomida ko'plab resurslarni bloklashi mumkin, shuning uchun siz kirish nizolarini minimallashtirishga alohida e'tibor berishingiz kerak.
MS SQL Server muhitida triggerlarni amalga oshirish
MS SQL Server DBMSni amalga oshirishda triggerni yaratish yoki o'zgartirish uchun quyidagi operator qo'llaniladi:
<Определение_триггера>::= (CREATE | ALTER) TRIGGER trigger_name ON (jadval_nomi | view_name ) ( ( ( UCHUN | KEYIN | OʻRNI ) ( [ OʻCHIRISH] [,] [ INSERT] [,] [ YANGILANISH] ) [ BILAN QILISH ] [ EMAS REPLIKATSIYA ] AS sql_statement[...n] ) | ( (UCHUN | KEYIN | OʻRNI ) ( [,] ) [ QOʻSHIMCHA BILAN] [ REPLIKATSIYA UCHUN EMAS] AS ( AGAR YANGILANISH (ustun_nomi) [ (VA | YOKI) YANGILANISH( ustun_nomi)] [...n] |AGAR (COLUMNS_UPDATES()(process_bit_operator) update_bitmask) (qiyoslash_bit_operator )bit_mask [...n]) sql_operator [...n] ) )
Trigger faqat joriy ma'lumotlar bazasida yaratilishi mumkin, lekin boshqa ma'lumotlar bazalariga trigger ichida kirish mumkin, shu jumladan masofaviy serverda joylashgan.
CREATE | dan argumentlarni tayinlashni ko'rib chiqing