СКЛ окидачи: Основни водич

Окидачи су ентитети базе података у СКЛ Серверу. Технички, они су посебна класа позива функција која одговара на специфичне операције базе података.

Овај основни водич ће вам дати детаљне информације о СКЛ окидачима који могу бити веома корисни у вашој професији. Хајде да почнемо!

Шта су СКЛ окидачи?

Реч „окидач“ описује изјаву да сервер аутоматски извршава упит сваки пут када се садржај у бази података промени.

Окидач је група посебно именованих СКЛ упита који се чувају у меморијском простору. То је специфичан тип позива функције који се одмах позива кад год се деси било који догађај базе података. Сваки окидач има табелу која му је додељена.

На пример, окидач се може активирати сваки пут када се у одређену табелу дода нова колона или ако се одређени записи мењају.

Према Мицрософт Девелопер Нетворк-у, окидачи су посебна класа ускладиштених процедура. У наредби окидача у почетку дефинишемо када окидач треба да се покрене, а затим обезбеђујемо радњу коју треба предузети након што се окидач активира.

Синтакса:

CREATE TRIGGER trigger_name
BEFORE/AFTER
INSERT/UPDATE/DELETE
ON tableName
FOR EACH ROW SET operation [trigger_body];

Објашњење сваког параметра

  • ЦРЕАТЕ ТРИГГЕР име_окидача – Користи се за конструисање окидача или за промену имена постојећег окидача.
  • ПРЕ/ПОСЛЕ – Овај упит се користи за дефинисање времена извршења окидача (пре или после одређеног догађаја).
  • ИНСЕРТ/УПДАТЕ/ДЕЛЕТЕ – Ово описује радњу коју желимо да предузмемо на табелама.
  • ОН таблеНаме – Овде дефинишемо име табеле за подешавање окидача.
  • ЗА СВАКИ РЕД – Ова изјава се односи на окидач реда, што значи да ће се окидачи извршавати кад год се ред промени.
  • триггер_боди – Одређује радњу коју треба предузети када се окидач активира.

Окидачи су ускладиштене функције са карактеристичним идентитетима који нам омогућавају да поново користимо упите који су већ извршени и безбедно ускладиштени у меморији. Сада покушајмо да разумемо зашто су СКЛ-у потребни.

Окидачи се углавном користе за регулисање примене кода кад год се деси неки догађај. Другим речима, коришћење окидача је идеалан избор ако захтевате да се одређени фрагмент кода стално покреће као одговор на одређени догађај.

Следе неке предности коришћења окидача у операцијама СКЛ базе података.

  • Врши додатне провере приликом уметања, ажурирања или брисања података из погођене табеле.
  • Смањује време одзива, што помаже у повећању рачунарских трошкова.
  • Омогућава кодирање софистицираних подразумеваних параметара који су недоступни почетним ограничењима.
  • Референтни интегритет је кључно основно својство система релационих база података. Ово значи да подаци који се чувају у систему базе података морају увек бити тачни за сваку трансакцију и сваку операцију.

      Како преузети музику са Аппле Мусиц-а

    Ако се две табеле налазе у одвојеним базама података или системима, не постоји начин да се обезбеди валидација података у њима помоћу вредности ограничења. У таквој ситуацији, окидачи су једина опција за извршење.

    Комбинација аргумената окидача

    За сваку табелу можемо навести шест различитих типова окидача. Ово је комбинација аргумената Триггер укључених у СКЛ окидаче на нивоу реда.

    ПРЕ ИНСЕРТ-а: Ови покретачи извршавају радњу на редовима пре извођења било које ИНСЕРТ операције у наведеној табели или бази података.

    АФТЕР ИНСЕРТ: Извршава радњу на редовима непосредно након било које активности ИНСЕРТ базе података.

    ПРЕ АЖУРИРАЊА: Са овим окидачима, функција на редовима се извршава пре него што се акција УПДАТЕ изврши на бази података.

    НАКОН АЖУРИРАЊА: Извршава радњу на редовима одмах након било које базе података или специфичне активности АЖУРИРАЊА табеле.

    ПРЕ ДЕЛЕТЕ: Извршава одређену операцију на редовима чак и пре него што база података или табела буду подвргнути акцији ДЕЛЕТЕ.

    НАКОН ДЕЛЕТЕ: Ови покретачи извршавају радњу у редовима након сваке трансакције ДЕЛЕТЕ.

    Типови СКЛ окидача

    СКЛ окидачи су ускладиштене функције које се покрећу одмах када се догоде одређени догађаји. То личи на заказивање вођено догађајима. Наредне ситуације могу започети извршавање окидача.

    ДМЛ окидачи – ДМЛ је скраћеница од језика за манипулацију подацима. Извршење кода као реакција на модификацију података омогућено је коришћењем ДМЛ тригера. Овај окидач се активира када се изврше ДМЛ команде као што су ИНСЕРТ, УПДАТЕ и ДЕЛЕТЕ. Они се такође називају „окидачи на нивоу табеле“.

    ДДЛ тригери – ДДЛ је скраћеница од језика дефиниције података. ДДЛ окидачи нам омогућавају да покренемо код као реакцију на промене шеме базе података, као што је додавање или брисање табела, или догађаји на серверу, као што је када се корисник пријави. Они се називају „Тригери на нивоу базе података“.

    Ови окидачи се могу активирати када се у активној бази података изврше одређене ДДЛ изјаве као што су ЦРЕАТЕ, АЛТЕР или ДРОП. Они се такође могу користити за праћење и управљање активностима које се извршавају.

    Окидачи за пријаву – Кад год се догоди било који догађај ЛОГОН (покретање, пријављивање, одјава, искључивање), окидачи за пријаву се одмах позивају. Оне се спроводе само након процеса аутентификације корисника чак и пре него што се започне корисничка трансакција. ЛОГОН покретачи се неће покренути ако ауторизација не успе.

    Ови окидачи се могу користити за снимање историје пријављивања или успостављање ограничења догађаја за одређено пријављивање, између осталих функција ревизије и управљања идентитетом за везе са сервером.

    ЦЛР окидачи – ЦЛР је скраћеница од Цоммон Лангуаге Рунтиме. ЦЛР окидачи су заиста јединствени подскуп окидача изграђених углавном на ЦЛР-у у оквиру .НЕТ технологије. Ови окидачи су корисни ако окидач треба да изврши много прорачуна или мора да се односи на ентитет који није СКЛ.

      Како избрисати све фотографије са иПхоне-а

    ДМЛ и ДДЛ окидачи се заиста могу конструисати омогућавањем кодирања подржаних ЦЛР окидача у .НЕТ технологијама укључујући Висуал Басиц, Ц# и Ф-схарп.

    Пример СКЛ Сервер Триггер-а

    Хајде да разумемо ове концепте окидача на примеру.

    Прво, направимо базу података користећи СКЛ изразе.

    CREATE DATABASE testdb;
    use testdb;

    Овде сам дао „тестдб“ као име базе података. А следећи корак је креирање табеле.

    CREATE TABLE student(
      name varchar(25),
      id int(2),
      maths int(2),
      physics int(2),
      biology int(2),
      social int(2),
      total int(2)
     );

    Направио сам табелу за чување података о ученицима. А ево наредбе за описивање структуре табеле. Овде „студент“ је име табеле које сам дао.

    DESC student;

    Испод је структура табеле коју сам направио.

    +---------+-------------+------+-----+---------+-------+
    | Field   | Type        | Null | Key | Default | Extra |
    +---------+-------------+------+-----+---------+-------+
    | name    | varchar(25) | YES  |     | NULL    |       |
    | id      | int         | YES  |     | NULL    |       |
    | maths   | int         | YES  |     | NULL    |       |
    | physics | int         | YES  |     | NULL    |       |
    | biology | int         | YES  |     | NULL    |       |
    | social  | int         | YES  |     | NULL    |       |
    | total   | int         | YES  |     | NULL    |       |
    +---------+-------------+------+-----+---------+-------+
    7 rows in set (0.00 sec)

    Након креирања табеле, следећи корак је подешавање окидача. Хајде да покушамо да употребимо аргумент БЕФОРЕ ИНСЕРТ.

    Назив окидача који сам направио је „ознаке“. Чим се табела измени са оценама ученика, окидач испод покушава да аутоматски одреди укупну оцену ученика.

    CREATE TRIGGER marks
    BEFORE INSERT
    ON
    student
    FOR EACH ROW
    set new.total=new.maths+new.physics+new.biology+new.social;

    Пошто се од нас тражи да заменимо податке редова уместо да радимо са старим, дефинисали смо „укупно“ користећи ново име класе, а сви наредни изрази имају префикс новим кључним речима после тотал користећи оператор тачка. Сада ћемо додати вредности сваком реду и видети резултате. У почетку, укупна оцена је 0 за сваког ученика.

    INSERT INTO student VALUES("George",02,99,87,92,91,0);
    INSERT INTO student VALUES("James",03,91,81,94,90,0);
    INSERT INTO student VALUES("Harry",04,86,70,73,88,0);
    INSERT INTO student VALUES("John",05,73,89,78,92,0);
    INSERT INTO student VALUES("Lisa",01,94,75,69,79,0);
    

    Изјава окидача ће се аутоматски покренути када се подаци убаце у табелу ученика у овом случају. Укупан број бодова сваког ученика ће бити израчунат помоћу окидача. Сада, хајде да видимо да ли је окидач позван или не помоћу СЕЛЕЦТ наредбе.

    SELECT * FROM table_name;

    И ево коначног резултата.

    mysql> select * from student;
    +--------+------+-------+---------+---------+--------+-------+
    | name   | id   | maths | physics | biology | social | total |
    +--------+------+-------+---------+---------+--------+-------+
    | George |    2 |    91 |      81 |      94 |     90 |   356 |
    | James  |    3 |    86 |      70 |      73 |     88 |   317 |
    | Harry  |    4 |    73 |      89 |      78 |     92 |   332 |
    | John   |    5 |    94 |      75 |      69 |     79 |   317 |
    | Lisa   |    1 |    99 |      87 |      92 |     91 |   369 |
    +--------+------+-------+---------+---------+--------+-------+
    5 rows in set (0.00 sec)

    У горњем резултату можете видети да се све оцене предмета аутоматски додају за сваког ученика. Дакле, можемо закључити да је окидач успешно призван.

    Додатне операције окидача

    Можемо извршити многе операције помоћу окидача. Неки могу бити једноставни, а неки мало сложени, али када прођемо кроз упите, лако је разумети. Коришћењем Трансацт-СКЛ наредби, можете омогућити, онемогућити или избрисати окидаче користећи следеће команде.

      Како ажурирати управљачке програме за ГПУ (комплетан водич)

    Упит да бисте проверили да ли постоји одређени окидач или не

    Ова команда проверава да ли постоји наведени окидач у целој бази података.

    SELECT * FROM [sys].[triggers] WHERE [name] = 'Trigger_name'

    Упит за приказ покретача

    Сви окидачи који су доступни у активној бази података биће приказани следећом наредбом.

    SHOW TRIGGERS;

    Упит за онемогућавање окидача

    Следећа команда деактивира окидач у радној бази података.

    DISABLE TRIGGER trigger_name ON DATABASE;

    Такође можете навести одређено име табеле да бисте онемогућили окидач.

    DISABLE TRIGGER trigger_name ON table_name;

    Упит за омогућавање покретача

    Следећа команда прво деактивира одређени окидач који је дефинисан на наведеној табели у активној бази података пре него што га поново омогући.

    ALTER TABLE table_name DISABLE TRIGGER trigger_name
    
    ALTER TABLE table_name ENABLE TRIGGER trigger_name

    Окидач мора бити онемогућен пре него што покушате да га омогућите,

    Упит за омогућавање или онемогућавање свих покретача у табели

    Користећи горњу СКЛ наредбу, можемо деактивирати или активирати све окидаче табеле у исто време тако што ћемо заменити „СВЕ“ уместо одређеног имена окидача.

    ALTER TABLE table_name DISABLE TRIGGER ALL 
    
    ALTER TABLE table_name ENABLE TRIGGER ALL

    Упит за брисање или отпуштање окидача

    Окидач се може елиминисати брисањем њега или целе табеле. Сваки повезани окидач се такође брише када се обрише табела.

    DROP TRIGGER [trigger_name];

    Кад год се окидач избрише, повезани подаци се елиминишу из табеле података сис.објецтс.

    Предности окидача

    • Једноставно је направити окидаче, а сам окидач може позвати сачуване функције и методе.
    • Корисници могу имплементирати једноставну ревизију помоћу окидача.
    • Трагично, не можете креирати ограничења међу ентитетима у системима база података са СКЛ Сервером, иако можете емулирати рад ограничења коришћењем окидача.
    • Ограничења интегритета могу се применити у базама података помоћу окидача.
    • Када је потребна групна валидација, а не верификација ред по ред новоунетих или промењених података, окидачи могу бити од помоћи.

    Недостаци окидача

    СКЛ окидачи можда нису најбољи избор у неким ситуацијама због својих ограничења.

    • Окидачи морају бити тачно документовани.
    • Због истовременог извршавања базе података које можда није доступно компонентама апликације, отклањање окидача може бити изазовно.
    • ДМЛ искази постају сложенији када се користе окидачи.
    • Чак и мањи проблем са окидачем може довести до логичких грешака у изјави.

    Закључак

    Окидачи су веома корисне компоненте Трансацт-СКЛ-а и СКЛ-а, а можете их користити и у Орацле-у. Употреба окидача је кључна приликом позивања ускладиштених метода. Ови СКЛ покретачи нам омогућавају да анализирамо временске оквире активности и одредимо како да одговоримо на њих ако је потребно. Такође можемо да проверимо да ли је одређена табела повезана са окидачем за прикупљање података.

    Рекурзија се може омогућити окидачима. Кад год окидач на табели изврши команду на надређеној табели, друга итерација окидача се покреће, и то је познато као рекурзивни окидач. Ово помаже док покушавате да решите корелацију идентитета.

    Поред тога, окидачи регулишу образац ажурирања који је бази података дозвољено да прихвати. Веома је корисно задржати ограничења интегритета података у систему базе података ако СКЛ кључеви ограничења не постоје углавном примарни кључ и страни кључ.

    Надам се да вам је овај чланак био од помоћи у учењу о СКЛ окидачима.

    Ако желите да детаљно научите базе података, ево неколико одличних ресурса за учење СКЛ-а и НоСКЛ-а.