Води до създаването и прилагането

Определяне на спусъка в стандарта SQL

Тригери са вид съхранени процедури. Изпълнението им се случва, когато на масата на всяка манипулация на данните език (ГСД). Тригери се използват за проверка на целостта на данните и да се връщам на сделката.







Trigger - е съставен SQL-процедура, изпълнението на което се дължи на появата на определени събития в рамките на една релационна база данни. Използването на джапанки в голямата си част е много удобно за потребителите на базата данни. Но тяхното използване, често е свързано с допълнителни разходи на ресурси за / O операции I. В случая, когато същите резултати (с много по-ниски въздушни ресурси за разходи) могат да бъдат получени чрез използване на съхранени процедури или приложения, които използват задейства неподходящо.

Тригери - специален инструмент е SQL-сървър, използван за запазване на целостта на данните в базата данни. Почтено ограничения, правила и стойности не винаги е възможно да се постигне желаното ниво на функционалност. Често е необходимо да изпълняват сложни алгоритми за проверка на данни, за да се гарантира тяхната автентичност и реалност. Освен това, понякога е необходимо да се проследяват промените в справочната таблица за промяна на желаната свързаните с него данни. Тригери могат да се разглеждат като един вид филтър, въвеждане в експлоатация след извършване на всички операции в съответствие с правилата, приети стойности, и т.н.

Ускорителят е специален вид на съхранена процедура, стартирайте сървъра автоматично, когато се опита да промени данните в таблиците, с които са свързани тригери. Всяка тригер е свързан с определена маса. Всички промени, направени в тях данни се третират като една сделка. В случай на грешки или данни с корупцията възниква намаление на цените на сделката. Така промените са забранени. Отменен и всички промени, внесени от спусъка.

Той създава спусъка само собственикът на базата данни. Това ограничение не позволява на случайни промени в структурата на маси, начини за комуникация с тях и с други предмети

Ускорителят е много полезен и в същото време опасен инструмент. Така че, ако не логиката на работата му може лесно да се унищожи цялата база данни, така че спусъците трябва да бъде много внимателно отстранена.

За разлика от спусъка на обичайните практики се изпълнява безусловно за всеки отделен случай на настъпване на събитието спусъка. освен това, че все още няма аргументи. то Влизане в сила, понякога се нарича старта спусъка. С помощта на следните цели са постигнати спусъци:

  • проверка на коректността на данните и извършване на сложни ограничения интегритет на данните, които са трудни, ако не и невъзможно, да се запази целостта чрез ограниченията, наложени на масата;
  • отправяне на предупреждения, напомняйки за необходимостта от извършване на определени действия, когато се актуализира таблица, приложена по определен начин;
  • натрупването на одитна информация чрез фиксиране на детайлите на промените и лицата, които ги извършват;
  • репликация подкрепа.

CREATE TRIGGER Основният формат на командата е показан по-долу:

Trigger събития се състоят от вмъкване, делеция и обновяване на редове в таблицата. В последния случай, случай на задействане можете да посочите конкретните имена на колони на таблицата. Започнете спусъка времето се определя от ключова дума ПРЕДИ (спусък изтече преди свързаните събития) или след (след изпълнение).

Проведени стъпки определени тригер за всеки ред (за всеки ред), обхванати от събитието, или само веднъж за всяко събитие (за всеки ОБЯВЯВАНЕ).

предназначение <список_старых_или_новых_псевдонимов> Това се отнася до компоненти, такива като възраст, нов или ред (OLD / НЮ) или стари или нови таблица (OLD ТАБЛИЦА / нова маса). Ясно е, че старите стойности не се прилагат, за да вмъкнете събития и нови - за премахване на събития.

Когато се използва правилно води може да бъде много мощен механизъм. Основната им предимство е, че стандартните функции, се съхраняват в базата данни и последователно се активират всеки път, когато тя се обновява. Това може значително да се опрости прилагането. Въпреки това, трябва да споменем и недостатъците, присъщи на спусъка:

  • сложност: когато се движат някои функции към базата данни усложнява задачата на своя дизайн, изпълнение и прилагане;
  • скрита функционалност: прехвърлянето на функциите в тях данни и съхранява под формата на една или повече задействания, понякога това води до скрие от потребителя част от функционалността. Въпреки че това е до известна степен улеснява работата, но, за съжаление, това може да доведе до непредвидени, нежелани и потенциално опасни странични ефекти, тъй като в този случай потребителят не е в състояние да контролира всички процеси, протичащи в базата данни;
  • въздействие върху производителността: Преди всяка команда за промяна на държавната база данни база данни трябва да се провери състоянието на спусъка, за да се изясни необходимостта да тече спусъка за този отбор. Извършване на тези изчисления се отразява на цялостното функциониране на базата данни, но в моменти на върхово натоварване намаление може да стане особено важна. Ясно е, че с увеличаване на броя на тригери и повишено над свързан с такива операции.

Неправилно изписани тригери могат да доведат до сериозни проблеми, като например появата на "мъртви" ключалките. Тригери могат да блокират за дълго време много ресурси, така че трябва да се обърне специално внимание, за да сведе до минимум конфликтите за достъп.

Изпълнение на тригери в средата на SQL Server, държавите-членки

Изпълнението на MS SQL Server СУБД използва следната формулировка за създаване или промяна на спусъка:







Спусъкът може да бъде създаден само в текущата база данни, но жалбата е позволено в рамките на спусъка до други бази данни, включително и тези, намиращи се на отдалечен сървър.

Помислете за назначаването на аргументите на командата CREATE | ALTER спусъка.

Име на спусъка трябва да бъде уникален в базата данни. Освен това можете да укажете името на собственика.

видове тригери

В SQL Server, има два параметъра, които определят поведението на тригери:

Тригери се класифицират в зависимост от вида на командването, на които те отговарят.

Има три вида на тригери:

  • INSERT TRIGGER - тичам, когато се опитате да вмъкнете данни с помощта на командата INSERT.
  • UPDATE TRIGGER - тичам, когато се опитате да промените данните с помощта на командата UPDATE.
  • DELETE TRIGGER - тичам, когато се опитате да изтриете данни, като използвате командата за изтриване.

Дизайн [DELETE] [,] [INSERT] [,] [UPDATE] и за | СЛЕД | ВМЕСТО><[INSERT] [,] [UPDATE] определяют, на какую команду будет реагировать триггер. При его создании должна быть указана хотя бы одна команда. Допускается создание триггера. реагирующего на две или на все три команды.

Спор с APPEND ви позволява да създадете няколко предпоставките за всеки тип.

Когато създавате спусък с аргумент НЕ за репликацията му забранява да работи по време на механизмите за репликация модификация маси.

Дизайн AS sql_operator [. п] определя набор от оператори и SQL- команди, които ще бъдат изпълнени при стартиране на спусъка.

Отбележете, че в тригер не е позволено изпълнява няколко операции, като например:

  • създавате, променяте и изтривате бази данни;
  • Възстановяване на резервно копие на регистъра на база данни или сделка.

Тези команди не се допускат, защото не могат да бъдат анулирани в случай на намаление на цените, която тече спусъка. Тази забрана е малко вероятно да се отрази по някакъв начин на функционалността за създаване на тригери. Това е трудно да се намери ситуация, в която, например, след промяна на линията на таблицата е необходимо да се възстанови за архивиране на регистър на транзакциите.

спусъка Програмиране

Когато добавянето на команди, промяна и изтриване на записи, сървърът създава две специални маси: вмъква и изтрива. Те съдържат списъци на низове, които ще се добавят или премахват при сключване на сделката. Структура добавя и заличава маси идентични със структурата на таблици, за която се определя спусък. За всяко задействане създава свой собствен набор от таблици добавят и изтриват. Затова никой друг спусъка няма да бъде в състояние за достъп до тях. В зависимост от вида на операцията, която е предизвикала спусъка на изпълнение. съдържанието на вмъкват и изтриват таблици могат да бъдат различни:

  • INSERT команда - вмъква в таблицата съдържа всички струни, че потребителят се опитва да се вмъкнете в таблицата; в таблицата няма да бъде изтрит аудио линии; след резето всички редове от таблиците вмъкват в таблицата с ход източник;
  • команда Изтриване - изтрит в таблицата ще съдържа всички редове, че потребителят се опитва да изтрие; тригер може да провери всеки ред и да определи дали е разрешено нейното отстраняване; в таблицата няма да добавя аудио линии;
  • UPDATE команда - когато се изпълнява на масата се изтриват старите стойности на реда, за да бъдат изтрити при успешно завършване на спусъка. Нови стойности на редовете, съдържащи се в таблицата добавя. Тези линии ще бъдат добавени към оригиналния таблицата след успешното изпълнение на спусъка.

За информация относно броя на редовете, за да бъдат променени при успешно завършване на спусъка. Можете да използвате функцията @@ ROWCOUNT; го връща броя на редовете, обработвани от последната команда. Трябва да се подчертае, че спусъка не се изпълнява, когато се опитате да променя даден ред, и в момента командването на климата. Един такъв екип работи по няколко линии, така че спусъка трябва да се справят с всички тези линии.

Ако спусъка установено, че 100 от вмъкване, обновяване или изтриване на редове, само един, или не отговаря на другите условия, а след това не ред няма да бъде поставена, променени или отменени. Това поведение се дължи на изискванията на сделката - трябва да бъде изпълнена или всички модификации, или няма.

Изпълни се работи като имплицитно определено сделка, така че резето е разрешено да използва в команди за управление на сделка. По-специално, за откриване на нарушения на целостта ограничения за прекъсване на изпълнението на спусъка, и отмените всички промени, които са се опитвали да тече потребителят трябва да използва ROLLBACK сделката.

За списък на колони, които са се променили по време на вмъкване или обновяване на команди. причинена спусъка, за да се изпълни. Можете да използвате функцията COLUMNS_UPDATED (). Тя връща двоично число, като всеки бит от най-ниските съответства на една колона на таблицата (по реда на колоните, когато се създава таблицата). Ако битът е настроен на "1", съответната колона е променен. Освен това, фактът, че промяна на колона определя функция UPDATE (COLUMN_NAME).

За изтриване на спусъка, използвайте командата

Примери за използването на води.

Пример 14.1. С помощта на спусъка за прилагането на ограничения по отношение на стойността. Добавената маса транзакция записва броя на продадените стоки не трябва да бъде по-малко от остатъка си от Таблица материал.

вмъкване на записи Command транзакции таблица може да бъде, например, както следва:

Генериран спусъка трябва да отговори на нейното изпълнение, както следва: необходимо е да се отмени заповедта, ако стойността на остатъка от таблицата складови стоки е по-малки количества стоки, продавани с въведения код (Пример Код на продукта = 3). В поставен рекорд количеството стоки, обозначени със знак "+", ако се доставят стоките, а знакът "-", ако тя се продава. Представен от спусъка конфигуриран да обработва само един запис се добавя.

Пример 14.1. С помощта на спусъка за прилагането на ограничения по отношение на стойността.

Пример 14.2. Използвайте спусък за събиране на статистически данни.

Създаване на тригер за операцията по усъвършенстване на запис в таблицата с вложка сделка. например, следната команда:

доставените стоки с код 3 от кода на клиента в размер на 1 200 единици.

При продажба или получаване на стоките трябва да се коригира размера на неговите акции. Ако запасите на ръка, все още е там, трябва да добавите запис в галерия маса. Trigger справя се добавя само един низ.

Пример 14.2. Използвайте спусък за събиране на статистически данни.

Пример 14.3. Създаване на тригер за операцията по усъвършенстване на изтриване на транзакция влизане на маса. например, следната команда:

За стоките, чиято код се вписва, когато изтриете запис, трябва да му се регулира баланса на склад. Trigger процеси само един сменяем запис.

Пример 14.3. Trigger на операции по усъвършенстване за изтриване на запис от таблицата

Пример 14.4. Създаване на тригер за промяна в операцията по обработка на запис в таблицата на сделката. например, командата:

във всички сделки с стоките, носещи кода равно на 3, за да се намали количеството на 10 единици.

Командата не може да променя множество записи в таблицата на сделка. Ето защо, ние показваме как да създадете спусъка. обработване на повече от един запис. За всеки модифициран запис е необходимо за един стар (преди промяната) Код на продукта се намали т остатък в наличност от стойността на стария (преди промените) номера на позиция и нова (след смяната) кода на продукта по-голям остатък в наличност от стойността на новата (след смяната) стойност. (От добавя таблицата) за обработка на всички променени документи, въвеждане на курсори, които пазят всички стари (изтрит от таблицата), както и всички нови стойности.

Пример 14.4. задейства, за да промените операция по обработка в реда от таблица

В горното предизвика никакво сравнение на размера на стоки при смяна на запис на сделката с остатък на склад.

Пример 14.5. Коригирането на този недостиг. За да се генерира съобщение за грешка в тялото на използване спусък MS SQL Server RAISERROR команда. чиито аргументи са съобщение, тежестта и състоянието на грешка.

Пример 14.5. Ревизираната спусъка, за да промените операция обработка в реда от таблица

Пример 14.6. Пример 14.5 анулира всички промени, когато е невъзможно да се приложи най-малко един от тях. Създаване на спусъка. Позволява ви да отмените промяната само някои записи и да изпълнява друга промяна.

В този случай, на спусъка не се извършва след промяна на регистрите, и вместо смяна на екипа.

Пример 14.6. Trigger, която ви позволява да отмените промените само някои записи и да изпълнява друга промяна.