Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Вивчайте Тригери | Деякі Додаткові Теми
Просунуті Техніки в SQL

bookТригери

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

Note

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

DML-тригери

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

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

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

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

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

-- 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();

Note

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

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

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

-- 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();

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

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

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

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

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

Awesome!

Completion rate improved to 4.35

bookТригери

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

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

Note

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

DML-тригери

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

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

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

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

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

-- 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();

Note

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

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

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

-- 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();

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

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

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

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