Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Вивчайте Тригери | Деякі Додаткові Теми
Оптимізація SQL та Особливості Запитів

bookТригери

Тригери у базах даних — це спеціальні типи збережених процедур, які автоматично виконуються або спрацьовують у відповідь на певні події чи дії, що відбуваються в базі даних.
Ці події можуть включати вставку, оновлення або видалення даних у таблицях, а також зміни об'єктів схеми бази даних, таких як таблиці чи подання.

DML-тригери

DML-тригер (тригер мови маніпулювання даними) — це об'єкт бази даних, який автоматично виконує визначену дію при настанні певної події над таблицею або поданням.
DML-тригери часто використовуються для забезпечення бізнес-правил, підтримки цілісності даних або виконання аудиторських завдань.

Типи DML-тригерів

  • After-тригери: Такі тригери спрацьовують після виконання дії (вставка, оновлення, видалення) над таблицею;
  • Before-тригери: Такі тригери спрацьовують до виконання дії. Вони дозволяють перехопити початкову дію та виконати власну логіку перед тим, як вирішити, чи продовжувати виконання початкової дії.

Приклад after-тригера

Раніше ми розглядали приклад використання транзакції для додавання значень у таблиці BankAccounts та UserLogs як єдиного логічного блоку в першому розділі цього курсу.
Тепер, замість використання транзакції, ми можемо досягти цього, створивши AFTER-тригер на операцію INSERT у таблиці BankAccounts.
У результаті ми зможемо додавати лише нові рахунки, а відповідне значення журналу буде автоматично додано тригером.

12345678910111213141516
-- Create an after-insert trigger for UserLogs CREATE FUNCTION after_insert_trigger_function() RETURNS TRIGGER AS $$ BEGIN -- Perform some action, like logging the insert INSERT INTO UserLogs (account_number, action) VALUES (NEW.account_number, CONCAT('New record inserted for ', NEW.account_holder)); RETURN NEW; END; $$ LANGUAGE plpgsql; -- Attach the trigger to the BankAccounts table CREATE TRIGGER after_insert_trigger AFTER INSERT ON BankAccounts FOR EACH ROW EXECUTE PROCEDURE after_insert_trigger_function();
copy
Note
Примітка

У тригерах PostgreSQL NEW — це спеціальна змінна-запис, яка представляє новий рядок, вставлений або оновлений у таблиці. Вона дозволяє отримати доступ до значень стовпців нового рядка всередині функції тригера.
Якщо ми працюємо з видаленими рядками, потрібно використовувати змінну-запис OLD замість NEW.

Приклад тригера BEFORE

Припустимо, потрібно запобігти додаванню записів із негативним залишком на рахунку. Для цього можна створити тригер типу BEFORE. Такий тригер перевіряє залишок до виконання операції, і якщо він від’ємний, операція не виконується.

12345678910111213141516171819202122232425
-- Create the trigger function CREATE FUNCTION before_insert_trigger_function() RETURNS TRIGGER AS $$ BEGIN -- Check if the account balance is less than 0 IF (NEW.balance < 0) THEN -- If balance is less than 0, do nothing and return RAISE NOTICE 'Balance is less than 0. Action not logged.'; ELSE -- If balance is greater than or equal to 0, log the action RAISE NOTICE 'Logging insert into UserLogs'; -- Inserting into the UserLogs table INSERT INTO UserLogs (account_number, action) VALUES (NEW.account_number, CONCAT('Account created for ', NEW.account_holder)); END IF; -- Indicate that the trigger function has completed successfully RETURN NULL; END; $$ LANGUAGE plpgsql; -- Create the trigger CREATE TRIGGER before_insert_trigger BEFORE INSERT ON BankAccounts FOR EACH ROW EXECUTE PROCEDURE before_insert_trigger_function();
copy

Шаблон створення тригера

Можна виділити типовий шаблон створення тригерів: спочатку визначається функція, яка виконує певну логіку до або після операції. Далі цю функцію прив’язують як тригер до конкретної таблиці та дії.

Зверніть увагу, що в операторі:

CREATE TRIGGER trigger_name
AFTER INSERT ON table_name
FOR EACH ROW
EXECUTE PROCEDURE proc_name;

є можливість використовувати UPDATE або DELETE замість операції INSERT.
Але зверніть увагу, що не можна створювати тригери для SELECT, оскільки оператор SELECT не змінює жодних рядків у таблиці!

question mark

Яка основна мета використання тригерів у базі даних?

Select the correct answer

Все було зрозуміло?

Як ми можемо покращити це?

Дякуємо за ваш відгук!

Секція 3. Розділ 1

Запитати АІ

expand

Запитати АІ

ChatGPT

Запитайте про що завгодно або спробуйте одне із запропонованих запитань, щоб почати наш чат

Suggested prompts:

Can you explain the difference between AFTER and BEFORE triggers in more detail?

What are some common use cases for DML triggers in real-world applications?

How can I modify a trigger to handle UPDATE or DELETE operations instead of INSERT?

bookТригери

Свайпніть щоб показати меню

Тригери у базах даних — це спеціальні типи збережених процедур, які автоматично виконуються або спрацьовують у відповідь на певні події чи дії, що відбуваються в базі даних.
Ці події можуть включати вставку, оновлення або видалення даних у таблицях, а також зміни об'єктів схеми бази даних, таких як таблиці чи подання.

DML-тригери

DML-тригер (тригер мови маніпулювання даними) — це об'єкт бази даних, який автоматично виконує визначену дію при настанні певної події над таблицею або поданням.
DML-тригери часто використовуються для забезпечення бізнес-правил, підтримки цілісності даних або виконання аудиторських завдань.

Типи DML-тригерів

  • After-тригери: Такі тригери спрацьовують після виконання дії (вставка, оновлення, видалення) над таблицею;
  • Before-тригери: Такі тригери спрацьовують до виконання дії. Вони дозволяють перехопити початкову дію та виконати власну логіку перед тим, як вирішити, чи продовжувати виконання початкової дії.

Приклад after-тригера

Раніше ми розглядали приклад використання транзакції для додавання значень у таблиці BankAccounts та UserLogs як єдиного логічного блоку в першому розділі цього курсу.
Тепер, замість використання транзакції, ми можемо досягти цього, створивши AFTER-тригер на операцію INSERT у таблиці BankAccounts.
У результаті ми зможемо додавати лише нові рахунки, а відповідне значення журналу буде автоматично додано тригером.

12345678910111213141516
-- Create an after-insert trigger for UserLogs CREATE FUNCTION after_insert_trigger_function() RETURNS TRIGGER AS $$ BEGIN -- Perform some action, like logging the insert INSERT INTO UserLogs (account_number, action) VALUES (NEW.account_number, CONCAT('New record inserted for ', NEW.account_holder)); RETURN NEW; END; $$ LANGUAGE plpgsql; -- Attach the trigger to the BankAccounts table CREATE TRIGGER after_insert_trigger AFTER INSERT ON BankAccounts FOR EACH ROW EXECUTE PROCEDURE after_insert_trigger_function();
copy
Note
Примітка

У тригерах PostgreSQL NEW — це спеціальна змінна-запис, яка представляє новий рядок, вставлений або оновлений у таблиці. Вона дозволяє отримати доступ до значень стовпців нового рядка всередині функції тригера.
Якщо ми працюємо з видаленими рядками, потрібно використовувати змінну-запис OLD замість NEW.

Приклад тригера BEFORE

Припустимо, потрібно запобігти додаванню записів із негативним залишком на рахунку. Для цього можна створити тригер типу BEFORE. Такий тригер перевіряє залишок до виконання операції, і якщо він від’ємний, операція не виконується.

12345678910111213141516171819202122232425
-- Create the trigger function CREATE FUNCTION before_insert_trigger_function() RETURNS TRIGGER AS $$ BEGIN -- Check if the account balance is less than 0 IF (NEW.balance < 0) THEN -- If balance is less than 0, do nothing and return RAISE NOTICE 'Balance is less than 0. Action not logged.'; ELSE -- If balance is greater than or equal to 0, log the action RAISE NOTICE 'Logging insert into UserLogs'; -- Inserting into the UserLogs table INSERT INTO UserLogs (account_number, action) VALUES (NEW.account_number, CONCAT('Account created for ', NEW.account_holder)); END IF; -- Indicate that the trigger function has completed successfully RETURN NULL; END; $$ LANGUAGE plpgsql; -- Create the trigger CREATE TRIGGER before_insert_trigger BEFORE INSERT ON BankAccounts FOR EACH ROW EXECUTE PROCEDURE before_insert_trigger_function();
copy

Шаблон створення тригера

Можна виділити типовий шаблон створення тригерів: спочатку визначається функція, яка виконує певну логіку до або після операції. Далі цю функцію прив’язують як тригер до конкретної таблиці та дії.

Зверніть увагу, що в операторі:

CREATE TRIGGER trigger_name
AFTER INSERT ON table_name
FOR EACH ROW
EXECUTE PROCEDURE proc_name;

є можливість використовувати UPDATE або DELETE замість операції INSERT.
Але зверніть увагу, що не можна створювати тригери для SELECT, оскільки оператор SELECT не змінює жодних рядків у таблиці!

question mark

Яка основна мета використання тригерів у базі даних?

Select the correct answer

Все було зрозуміло?

Як ми можемо покращити це?

Дякуємо за ваш відгук!

Секція 3. Розділ 1
some-alt