Что такое триггер?
Что такое триггер ? столкнулся в книге, вот только там сложновато обьясняют.
- Вопрос задан более трёх лет назад
- 4574 просмотра
Комментировать
Решения вопроса 1
Действие, которое срабатывает при каком-то событии.
Ответ написан более трёх лет назад
Комментировать
Нравится 6 Комментировать
Ответы на вопрос 2
Love Family, Love Code
Хотел написать,что все просто и планировщик в винде понастраивайте и поймете.
Но призадумался,
где-то понимается под триггером условие срабатывания(планировщик), (время. событие)
где-то действие, которое срабатывает при некоторых условиях(база),
https://ru.wikipedia.org/wiki/Триггер_(базы_данных)
где-то все вместе (почти).(wpf xaml)
actions триггер>
Интересен контекст.
Ответ написан более трёх лет назад
Комментировать
Нравится 2 Комментировать
Developer, ex-admin
Хотя бы какой язык изучаете? И в каком контексте?
Обычно триггер это функция, задаваемая программистом, которая срабатывает по какому-либо событию. Вызывается асинхронно системой. По сути то же самое, что и функции обратного вызова (call back).
Ответ написан более трёх лет назад
Комментировать
Нравится 1 Комментировать
Ваш ответ на вопрос
Войдите, чтобы написать ответ

- Серверное оборудование
- +1 ещё
Упал сервер dell power edge 740, что делать?
- 3 подписчика
- 06 янв.
- 438 просмотров
Trigger Класс
Некоторые сведения относятся к предварительной версии продукта, в которую до выпуска могут быть внесены существенные изменения. Майкрософт не предоставляет никаких гарантий, явных или подразумеваемых, относительно приведенных здесь сведений.
Представляет триггер, который применяет значения свойств или выполняет действия условно.
public ref class Trigger : System::Windows::TriggerBase, System::Windows::Markup::IAddChild
public ref class Trigger : System::Windows::TriggerBase, System::ComponentModel::ISupportInitialize, System::Windows::Markup::IAddChild
[System.Windows.Markup.ContentProperty("Setters")] public class Trigger : System.Windows.TriggerBase, System.Windows.Markup.IAddChild
[System.Windows.Markup.ContentProperty("Setters")] [System.Windows.Markup.XamlSetTypeConverter("ReceiveTypeConverter")] public class Trigger : System.Windows.TriggerBase, System.ComponentModel.ISupportInitialize, System.Windows.Markup.IAddChild
[] type Trigger = class inherit TriggerBase interface IAddChild
[] [] type Trigger = class inherit TriggerBase interface IAddChild interface ISupportInitialize
[] [] type Trigger = class inherit TriggerBase interface ISupportInitialize interface IAddChild
Public Class Trigger Inherits TriggerBase Implements IAddChild
Public Class Trigger Inherits TriggerBase Implements IAddChild, ISupportInitialize
Наследование
Реализации
Примеры
В следующем примере показан именованный Style объект, доступный для Button элементов управления. Определяет StyleTrigger элемент , который изменяет Foreground свойство кнопки, IsPressed если свойство имеет значение true .
Комментарии
WPF определяет свойства, соответствующие действиям конечных пользователей, например IsMouseOver свойство , которое имеет значение true , когда пользователь навевает курсор на UIElement или соответствующее IsMouseOver свойство ContentElementобъекта . Представление действий конечных пользователей в значениях свойств вместе с элементом Trigger позволяет стилям WPF изменять значения свойств на основе этих действий конечного пользователя из разметки.
Свойства, измененные триггерами, автоматически сбрасываются до предыдущего значения, когда активированное условие больше не выполняется. Триггеры оптимизированы для временных состояний, которые должны измениться и вернуться в исходное состояние, например IsPressed в Button и IsSelected в ListBoxItem. Интересующий Property объект должен быть свойством зависимостей.
Обратите внимание, что необходимо указать свойства Property и Value в объекте , Trigger чтобы триггер был осмысленным. Если одно или оба свойства не заданы, создается исключение.
Свойство SettersTrigger объекта может состоять только из Setter объектов . Добавление дочернего Setter элемента к объекту Trigger неявно добавляет его в SetterBaseCollection для Trigger объекта . EventSetterобъекты не поддерживаются; поддерживает EventSetter только Style.Setters объекты.
Существуют и другие типы триггеров. MultiTrigger позволяет применять изменения на основе состояния нескольких свойств. EventTrigger позволяет применять изменения при возникновении события. DataTrigger и MultiDataTrigger предназначены для свойств, привязанных к данным.
Конструкторы
Инициализирует новый экземпляр класса Trigger.
Свойства
Возвращает объект DependencyObjectType , который заключает в оболочку тип среды CLR этого экземпляра.
Возвращает объект Dispatcher, с которым связан этот объект DispatcherObject.
Получает коллекцию объектов TriggerAction, применяемую, когда срабатывает триггер. Это свойство не применяется к классу EventTrigger.
Получает коллекцию объектов TriggerAction, применяемую, когда объект триггера становится неактивным. Это свойство не применяется к классу EventTrigger.
Получает значение, указывающее, является ли этот экземпляр в данный момент запечатанным (доступным только для чтения).
Возвращает или задает свойство, которое возвращает значение, сравниваемое со свойством Value триггера. Данное сравнение является проверкой равенства ссылок.
Возвращает коллекцию объектов Setter, описывающих значения свойств, которые должны применяться, если выполняется определенное условие.
Получает или задает имя объекта со свойством, которое вызывает применение соответствующих переключателей.
Возвращает или задает значение для сравнения с значением свойства элемента. Данное сравнение является проверкой равенства ссылок.
Методы
Определяет, имеет ли вызывающий поток доступ к этому DispatcherObject.
Очищает локальное значение свойства. Очищаемое свойство задается идентификатором DependencyProperty.
Очищает локальное значение доступного только для чтения свойства. Очищаемое свойство задается ключом DependencyPropertyKey.
Приводит значение указанного свойства зависимостей. Это осуществляется путем вызова какой-либо функции CoerceValueCallback, указанной в метаданных свойства зависимостей, которое существует в вызывающем объекте DependencyObject.
Определяет, является ли указанный DependencyObject эквивалентом текущего DependencyObject.
Возвращает хэш-код для данного объекта DependencyObject.
Создает специализированный перечислитель для определения свойств зависимостей, которые локально установили значения для данного DependencyObject.
Возвращает объект Type для текущего экземпляра.
Возвращает текущее действующее значение свойства зависимостей в этом экземпляре DependencyObject.
Повторно вычисляет действующее значение для указанного свойства зависимостей.
Создает неполную копию текущего объекта Object.
Вызывается каждый раз, когда обновляется действительное значение любого свойства зависимостей для данного DependencyObject. Конкретное измененное свойство зависимостей сообщается в данных события.
Возвращает локальное значение свойства зависимостей, если таковое существует.
Обрабатывает случаи, когда преобразователь типов предоставляет значение для свойства объекта Trigger.
Задает значение свойства зависимостей, не меняя источник значения.
Задает локальное значение свойства зависимостей, указанного идентификатором этого свойства.
Задает локальное значение свойства зависимости только для чтения, определяемое идентификатором DependencyPropertyKey свойства зависимостей.
Возвращает значение, которое указывает, следует ли процессам сериализации выполнять сериализацию значения для предоставленного свойства зависимостей.
Возвращает строку, представляющую текущий объект.
Обеспечивает наличие у вызывающего потока доступ к этому DispatcherObject.
Явные реализации интерфейса
Добавляет дочерний объект.
Добавляет к объекту текстовое содержимое узла.
Подает сигнал объекту о начале инициализации.
Подает объекту сигнал о завершении инициализации.
Триггеры
1. Триггеры 2. Назначение триггеров Триггер – это инструмент SQL-сервера, используемый для поддержания целостности данных в базе. Триггеры представляют собой специальный класс хранимых процедур, автоматически запускаемых при добавлении, изменении и удалении данных из таблицы. Каждый триггер привязывается к конкретной таблице. Когда пользователь пытается изменить данные в таблице, сервер автоматически запускает триггер, и только при его успешном завершении разрешается выполнение изменений. Триггеры применяются для обеспечения целостности данных и выполнения бизнес-правил, слишком сложных для реализации ограничений. В отличие от хранимых процедур, триггеры нельзя вызывать напрямую, в них нельзя передавать параметры. Главное их преимущество в том, что они могут содержать сложную логику обработки. С помощью триггеров осуществляются каскадные изменения данных, что позволяет сократить объем кода для обновления данных в связанных таблицах и обеспечить синхронность изменений во всех таблицах. Триггеры могут использоваться для выдачи пользовательских сообщений об ошибках при возникновении определенных условий в процессе выполнения этого триггера. Ограничения, правила и значения по умолчанию позволяют выводить лишь системные сообщения об ошибках. Триггеры не возвращают наборы результатов. Это связано с тем, что операторы INSERT, UPDATE и DELETE не должны возвращать наборы результатов. Как и хранимые процедуры, триггеры содержат операторы языка Transact-SQL. В зависимости от выполняемых пользователем действий, приводящих к запуску триггера, они делятся на три категории: · триггеры изменения (запускаются при попытке изменения данных с помощью команды UPDATE); · триггеры вставки (запускаются при попытке вставки данных с помощью команды INSERT);
Рекомендуемые материалы
Вариант 9 — ЛР №8
Информатика
199 90 руб.
4 РК – Строки Visual Basic(ИБМ) Вариант 18
Информатика
8 лекций в ворде
Информатика
Аттестационный тест по курсу «Информатика» 88,33%
Информатика
Лабораторная работа №8 Тассов К.Л.
Информатика
РК php 2018
Информатика
· триггеры удаления (запускаются при попытке удаления данных с помощью команды DELETE). При работе с триггерами доступны две специальные таблицы: таблиц вставок (INSERTED) и таблица удалений (DELETED) со структурой идентичной структуре таблицы, с которой связан триггер. При выполнении операции DELETE строки, удаленные из модифицируемой таблицы помещаются в таблицу DELETED. При выполнении операции INSERT строки, добавленные в модифицируемую таблицу, помещаются в таблицу INSERTED. При выполнении операции UPDATE исходное значение строки для каждой измененной строки ее исходное значение помещается в таблицу DELETED, а новое значение – в таблицу INSERTED. Данные таблиц INSERTED и DELETED можно использовать в триггере. 3. Создание триггеров Для создания триггеров используется оператор CREATE TRIGGER. В коде оператора указывается таблица, в которой следует создать триггер, а также операторы, включаемые в триггер. Пример 1. Создадим триггер для поддержки целостности данных – проверки наличия связанной записи в главной таблице при вводе данных в подчиненную таблицу (структура БД – см. рисунок 9) . При вводе номеров зачеток в таблицу USP, необходимо проверить наличие этого значения в поле Nom_Zach таблицы STUDENTS. Создаваемый триггер не позволит добавить новую запись в таблицу USP, если значение в поле Nom_Zach не совпадает ни с одним значением в поле Nom_Zach таблицы STUDENTS. Для создания триггера с именем INSCHECK c помощью утилиты SQL Server Enterprise Manager необходимо выбрать таблицу USP в списке объектов базы данных, затем выполнить команду All tasks/Manage Triggers меню Actions. После этого будет открыто диалоговое окно свойств триггера (Trigger Properties), в которое необходимо ввести текст процедуры: CREATE TRIGGER INSCHECK ON USP FOR INSERT AS DECLARE @X SELECT @X= Nom_Zach FROM INSERTED IF NOT EXISTS (SELECT * FROM STUDENTS WHERE Nom_Zach =@X) BEGIN ROLLBACK TRANS RAISERROR(‘ОШИБКА ЦЕЛОСТНОСТИ!’,16,10) END Триггер активизируется при вставке (ключевое слово INSERT) новой записи. После определения переменной @X ей присваивается значение поля Nom_Zach добавляемой записи. В процессе использования триггера создается временная таблица INSERTED, хранящая в себе добавляемые значения начальной таблицы USP. С помощью оператора SELECT переменной @X присваивается значение поля Nom_Zach из таблицы USP, то есть значение поля Nom_Zach вновь добавляемой записи. Следующий шаг работы триггера – проверка наличия в поле Nom_Zach таблицы STUDENTS значения переменной @X, то есть проверка допустимости вводимого значения. Если значение не найдено, то выполняется блок операторов, заключенных в области BEGIN …END. С помощью команды ROLLBACK TRANSACTION, используемой при работе с транзакциями, отменяется последняя операция. Оператор RAISERROR осуществляет выдачу системного сообщения об ошибке. Значения 16 и 10 определяют уровень критичности операции. Пример 2. Создадим триггер для удаления всех подчиненных записей в таблице USP при удалении записи из главной таблицы STUDENTS. Если из таблицы STUDENTS удаляются данные, о каком либо студенте (например, при его отчислении), то должны удаляться все записи таблицы USP, у которых значение поля Nom_Zach соответствует значению поля Nom_Zach удаляемой из таблицы STUDENTS записи. В таблице STUDENTS создадим триггер DELCHECK следующего содержания: CREATE TRIGGER DELCHECK ON STUDENTS FOR DELETE AS DECLARE @X int SELECT @X= Nom_Zach FROM DELETED IF EXISTS(SELECT * FROM USP WHERE Nom_Zach = @X) DELETE FROM USP WHERE Nom_Zach =@X В первой строке кода создается новый триггер с именем DELCHECK для таблицы STUDENTS, активизирующийся при удалении записи. Следующим шагом является определение переменной @X, которая будет содержать значение поля Nom_Zach удаляемой записи. Затем с помощью оператора SELECT данной переменной присваивается значение поля Nom_Zach удаляемой записи, находящейся в таблице DELETED. С помощью оператора EXISTS проверяется наличие записей в таблице USP, у которых в поле Nom_Zach находится значение @X. Если такие записи найдены, то система выполняет их удаление. Пример 3. Триггер осуществляет проверку введенной в таблицу USP оценки. CREATE TRIGGER USP__INPUT ON USP FOR INSERT, UPDATE AS DECLARE @Mark SELECT @Mark = Mark FROM INSERTED IF (@Mark<2)Or (@Mark>5) BEGIN RAISERROR (‘оценка должна находиться в диапазоне от 2 до5’) ROLLBACK TRANSACTION END Пример 4. Триггер для увеличения стипендии на 10% тем студентам, которые сдали зачет по спецкурсу (код предмета PKod=1278). CREATE TRIGGER UPDATE_ STIP ON USP FOR INSERT AS DECLARE @X int DECLARE @Z int DECLARE @P int DECLARE @Y varchar(10) select @X= Nom_Zach From INSERTED select @Y= Mark From INSERTED select @Z= PKodFrom INSERTED select @P= Nom_Zach From USP Where Nom_Zach = @X if(@Y= ‘зачтено‘ AND @Z=1278) BEGIN UPDATE STUDENTS SET Stip = Stip*1.1 WHERE Nom_Zach=@P END Следующие триггеры созданы для БД “Продажа объектов недвижимости”. Реляционная модель данных приведена на рисунке 8. Пример 5.Создать триггер для уменьшения цены квартиры на 5%, если при добавлении записи в таблицу VIEWING в поле COMMENT занесено значение “требует ремонта”. CREATE TRIGGER UPDATE_PRICE ON VIEWING FOR INSERT AS DECLARE @X int DECLARE @Y varchar(50) select @X=Property_no From INSERTED select @Y=Comments From INSERTED if(@Y= ‘требует ремонта’) BEGIN UPDATE PROPERTY SET Selling_Price=Selling_Price*0.5 FROM PROPERTY WHERE Property_no=@X END Область применения триггеров не ограничивается какими-то строго очерченными рамками. Триггеры можно применять по своему усмотрению, исходя из требований к удобству и производительности выполняемых действий. Не следует применять триггеры для выполнения простых проверок, которые могут быть произведены с помощью правил или ограничений целостности. Кроме того, следует избегать использования триггеров, если те же действия могут быть реализованы с помощью хранимой процедуры или обычного пакета команд Transact-SQL. Использование триггеров нежелательно еще и по той причине, что они блокируют таблицу до завершения триггера, запрещая обращение к ресурсу других пользователей. 4. Удаление триггера После того как триггер стал ненужным или даже мешает работе, его следует удалить. Выполнение этой операции осуществляется с помощью команды DROP TRIGGER, имеющей следующий синтаксис:
DROP TRIGGER [. n]
Так как имя триггера уникально в пределах базы данных, то указание имени таблицы не требуется. С помощью одной команды DROP TRIGGER можно удалить несколько триггеров, перечислив их имена через запятую. 5. КОНТРОЛЬНЫЕ ВОПРОСЫ 1. С какой целью создаются триггеры? 2. Как осуществляется запуск триггеров? 3. Могут ли триггеры возвращать наборы результатов? 4. Какие категории триггеров существуют? Лекция «Последствия радиационных аварий и катастроф» также может быть Вам полезна. 5. Для чего служат таблицы INSERTED и DELETED? Как эти таблицы используются при выполнении операции обновления? 6. Какой оператор служит для создания триггеров? 7. Объясните работу триггеров, приведенных в примерах. 8. Следует ли создавать триггеры в тех случаях, когда проверка может быть выполнена с помощью ограничений или правил? 9. Какой оператор служит для удаления триггера? 10. Можно ли удалить одновременно несколько триггеров?
Поделитесь ссылкой:
Рекомендуемые лекции
- Комплексы программ технического обслуживания
- Последствия радиационных аварий и катастроф
- 2.4. Контурные шрифты
- 3.3 Технология проектирования и разработки ЭС
- 13 — Уравнение Ходжкина Хаксим
Что такое триггер в программировании
Триггер является мощным инструментом контроля изменений данных в БД, а также помогает автоматизировать операции, которые должны выполняться в этом случае. Триггер выполняется после проверки правил обновления данных.
Триггер включает в себя две компоненты:
— ограничения, для реализации которых он создается;
— событие, характеризирующее возникновение ситуации, требующей проверки ограничений.
Предусмотренное действие производится за счет выполнения определенной операции или последовательности операций, с помощью которых реализуется логика, требуемая для удовлетворения ограничений.
События возникают при изменении содержимого таблицы. Действие, вызываемое событием, задается последовательностью запросов SQL и операторов процедурного языка Firebird.
Триггеры являются частью работы транзакции, в которой событие DML изменяет состояние строки. Если транзакция успешно подтверждается, то все действия триггеров принимаются. Если будет выполнен откат транзакции, то все действия триггера будут отменены.
В Firebird триггер определяется запросом CREATE TRIGGER, имеющим следующий формат:
CREATE TRIGGER имя триггера FOR < базовая таблица представление >[ACTIVE INACTIVE]
Определение триггера состоит из заголовка и тела. Заголовок содержит:
— имя создаваемого триггера;
— имя таблицы или модифицируемого представления, для которых создается триггер;
— состояние триггера (активный или неактивный);
— описание связи с событиями, при наступлении которых триггер должен сработать;
— приоритет выполнения триггера над другими триггерами, если те связаны с той же таблицей (представлением).
В заголовке триггера его активность определяется указанием ключевого слова ACTIVE. Триггер можно отключить , если использовать в заголовке триггера ключевое слово INACTIVE. По умолчанию любой триггер создается активным, т.е. не обязательно указывать ключевое слово ACTIVE при определении нового триггера. Явное указание ACTIVE может потребоваться при включении неактивного триггера (как можно модифицировать ранее созданный триггер будет подробно описано далее).
Триггер может выполняться в одной из двух фаз: BEFORE или AFTER. BEFORE указывает на то, что триггер должен сработать до указанных событий, а AFTER активизирует работу триггера после наступления указанных событий.
DELETE, INSERT и UPDATE задают три типа событий, на которые триггер реагирует соответственно при удалении, вставке или обновлении таблицы, для которой создан триггер.
Возможно объединение действий для двух или трех событий DML в одном триггере. В то же время в базе данных может быть создано несколько триггеров, которые ассоциированы с одной и той же таблицей, одним и тем же событием и имеют одну и ту же фазу. При этом для одной таблицы (представления) можно создать не более 32768 триггеров. Порядок выполнения таких триггеров устанавливается с помощью параметра предложения
Значение приоритет триггера может меняться от 0 до 32767. Триггеры с меньшими номерами выполняются первыми. Если же несколько триггеров имеют один и тот же приоритет, то они выполняются в алфавитном порядке их имен.
Тело триггера задает последовательность действий, которая будет реализована СУБД при наступлении контролируемых событий над заданной таблицей или представлением.
Тело триггера, как и тело ХП, состоит из списка объявления используемых локальных переменных и блока выполняемых операторов: [] ,
где и имеют такой же синтаксис, который был описан ранее.
Рассмотрим пример триггера для одного события. Пусть требуется перед удалением записей в таблице Executor сохранять в таблице History информацию о ФИО всех исполнителей ремонтных заявок и дате, до которой данная информация была актуальна. Скрипт для создания триггера Executor Delete, реализующего решение данной задачи, будет выглядеть следующим образом:
CONNECT c:\sqllab.fdb USER SYSDBA PASSWORD masterkey;
/* создание в тексте SQL сценария таблицы History */
CREATE TABLE History (ID INTEGER PRIMARY KEY, Executor List VARCHAR(300), FixDate DATE);
CREATE SEQUENCE Gen History;
/* установка начального значения генератора*/
ALTER SEQUENCE Gen History RESTART WITH 0;
SET TERM !! ; /*установка нового разделителя*/
CREATE TRIGGER Executor Delete FOR Executor ACTIVE BEFORE DELETE
DECLARE VARIABLE Line VARCHAR(32000);
/* вызов хранимой процедуры для записи ФИО всех исполнителей в переменную Line */
EXECUTE PROCEDURE SampleThree(Fio,Executor)
RETURNING VALUES Line; /* вставка строки в таблицу History */ INSERT INTO History VALUES
(NEXT VALUE FOR Gen History, :Line, CURRENT DATE); END!! /*конец оператора CREATE TRIGGER */ SET TERM ; !! /*установка стандартного разделителя */.
В приведенном скрипте сначала производится создание таблицы History, а также определение и установка начального значения генератора GenHistory, используемого для получения уникального значения поля первичного ключа таблицы History. Затем создается триггер ExecutorDelete, который будет запускаться перед наступлением события удаления строки из таблицы Executor. Триггер вызывает ранее созданную процедуру SampleThree, осуществляющую запись в переменную Line ФИО всех исполнителей ремонтных заявок, разделенных запятыми. Значение, полученное в переменной Line и дата, до которой информация была актуальна (дата удаления записей, т.е. текущая дата), записываются в таблицу History с помощью запроса INSERT, размещенного в теле триггера.
Следует обратить внимание на следующие особенности:
— отсутствие точки с запятой перед переменной Line в предложении RETURNINGVALUES;
— использование двоеточия перед переменной Line в списке значений VALUES запроса INSERT. Двоеточие указывает на использование локальной переменной, а не имени столбца таблицы.
Характерной особенностью триггеров является то, что в них может использоваться ряд контекстных переменных, которые нельзя использовать в
Основным средством реализации возможностей триггеров по отслеживанию целостности данных являются контекстные переменные OLD и NEW. Переменные используются в следующем виде: .столбец .
Контекстная переменная OLD ссылается в строке на текущие или предыдущие значения, которые обновляются или удаляются соответственно запросами UPDATE или DELETE в таблице, для которой создан триггер. Таким образом, переменная OLD не используется при вставке, т.к. старого значения не существует.
Переменная OLD является контекстной переменной только для чтения, поэтому попытка присвоить какое-либо значение переменной OLD.столбец будет отклонена.
Контекстная переменная NEW ссылается в строке на новые значения, которые будут вставлены или обновлены соответственно запросами INSERT