Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Leer Triggers | Enkele Aanvullende Onderwerpen
Geavanceerde Technieken in SQL

bookTriggers

Triggers in databases zijn speciale typen opgeslagen procedures die automatisch worden uitgevoerd of geactiveerd als reactie op bepaalde gebeurtenissen of acties die plaatsvinden in de database.
Deze gebeurtenissen kunnen het invoegen, bijwerken of verwijderen van gegevens in tabellen omvatten, evenals wijzigingen aan databaseobjecten zoals tabellen of views.

Opmerking

Triggers kunnen niet expliciet door gebruikers worden aangeroepen. In plaats daarvan worden ze automatisch uitgevoerd als reactie op de bewerkingen waarmee ze zijn geassocieerd.

DML-triggers

Een DML-trigger, ook wel Data Manipulation Language-trigger genoemd, is een databaseobject dat automatisch een gespecificeerde actie uitvoert wanneer een bepaalde gebeurtenis plaatsvindt op een tabel of view.
DML-triggers worden vaak gebruikt om bedrijfsregels af te dwingen, gegevensintegriteit te waarborgen of auditdoeleinden te ondersteunen.

Typen DML-triggers

  • After-triggers: Deze triggers worden na de activerende bewerking (insert, update, delete) op de tabel uitgevoerd;
  • Before-triggers: Deze triggers worden voor de activerende bewerking uitgevoerd. Ze stellen u in staat om de oorspronkelijke actie te onderscheppen en aangepaste logica uit te voeren voordat wordt besloten of de oorspronkelijke actie wordt voortgezet.

Voorbeeld van een after-trigger

Eerder hebben we een voorbeeld bekeken van het gebruik van een transactie om waarden toe te voegen aan de BankAccounts-tabel en de UserLogs-tabel als één logische eenheid in de eerste sectie van deze cursus.
Nu kunnen we dit, in plaats van een transactie te gebruiken, bereiken door een AFTER-trigger te maken op de INSERT-bewerking binnen de BankAccounts-tabel.
Hierdoor kunnen we alleen nieuwe accounts invoegen, en de bijbehorende logwaarde wordt automatisch toegevoegd door de trigger.

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

Opmerking

In PostgreSQL-triggers is NEW een speciale recordvariabele die de nieuwe rij die is ingevoegd of bijgewerkt in de tabel vertegenwoordigt. Hiermee kunt u de waarden van kolommen in de nieuwe rij binnen de triggerfunctie benaderen.
Als we werken met verwijderde rijen, moeten we de OLD-recordvariabele gebruiken in plaats van NEW.

Voorbeeld van een before-trigger

Stel dat we willen voorkomen dat waarden met een negatief rekeningsaldo worden toegevoegd. We kunnen hiervoor een BEFORE-trigger maken. Deze trigger controleert het saldo vóór de bewerking, en als het negatief is, wordt de bewerking niet uitgevoerd.

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

Trigger aanmaakpatroon

Het typische patroon voor het aanmaken van triggers is als volgt: eerst wordt een functie gedefinieerd om specifieke logica uit te voeren vóór of na een bewerking. Vervolgens wordt deze functie gekoppeld als trigger aan een bepaalde tabel en actie.

Let op de volgende instructie:

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

Hierbij is het mogelijk om UPDATE of DELETE te gebruiken in plaats van de INSERT-bewerking.
Maar let op dat het niet mogelijk is om SELECT-triggers te maken, aangezien de SELECT-instructie geen rijen in de tabel wijzigt!

question mark

Wat is het primaire doel van het gebruik van triggers in een database?

Select the correct answer

Was alles duidelijk?

Hoe kunnen we het verbeteren?

Bedankt voor je feedback!

Sectie 3. Hoofdstuk 1

Vraag AI

expand

Vraag AI

ChatGPT

Vraag wat u wilt of probeer een van de voorgestelde vragen om onze chat te starten.

Awesome!

Completion rate improved to 4.35

bookTriggers

Veeg om het menu te tonen

Triggers in databases zijn speciale typen opgeslagen procedures die automatisch worden uitgevoerd of geactiveerd als reactie op bepaalde gebeurtenissen of acties die plaatsvinden in de database.
Deze gebeurtenissen kunnen het invoegen, bijwerken of verwijderen van gegevens in tabellen omvatten, evenals wijzigingen aan databaseobjecten zoals tabellen of views.

Opmerking

Triggers kunnen niet expliciet door gebruikers worden aangeroepen. In plaats daarvan worden ze automatisch uitgevoerd als reactie op de bewerkingen waarmee ze zijn geassocieerd.

DML-triggers

Een DML-trigger, ook wel Data Manipulation Language-trigger genoemd, is een databaseobject dat automatisch een gespecificeerde actie uitvoert wanneer een bepaalde gebeurtenis plaatsvindt op een tabel of view.
DML-triggers worden vaak gebruikt om bedrijfsregels af te dwingen, gegevensintegriteit te waarborgen of auditdoeleinden te ondersteunen.

Typen DML-triggers

  • After-triggers: Deze triggers worden na de activerende bewerking (insert, update, delete) op de tabel uitgevoerd;
  • Before-triggers: Deze triggers worden voor de activerende bewerking uitgevoerd. Ze stellen u in staat om de oorspronkelijke actie te onderscheppen en aangepaste logica uit te voeren voordat wordt besloten of de oorspronkelijke actie wordt voortgezet.

Voorbeeld van een after-trigger

Eerder hebben we een voorbeeld bekeken van het gebruik van een transactie om waarden toe te voegen aan de BankAccounts-tabel en de UserLogs-tabel als één logische eenheid in de eerste sectie van deze cursus.
Nu kunnen we dit, in plaats van een transactie te gebruiken, bereiken door een AFTER-trigger te maken op de INSERT-bewerking binnen de BankAccounts-tabel.
Hierdoor kunnen we alleen nieuwe accounts invoegen, en de bijbehorende logwaarde wordt automatisch toegevoegd door de trigger.

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

Opmerking

In PostgreSQL-triggers is NEW een speciale recordvariabele die de nieuwe rij die is ingevoegd of bijgewerkt in de tabel vertegenwoordigt. Hiermee kunt u de waarden van kolommen in de nieuwe rij binnen de triggerfunctie benaderen.
Als we werken met verwijderde rijen, moeten we de OLD-recordvariabele gebruiken in plaats van NEW.

Voorbeeld van een before-trigger

Stel dat we willen voorkomen dat waarden met een negatief rekeningsaldo worden toegevoegd. We kunnen hiervoor een BEFORE-trigger maken. Deze trigger controleert het saldo vóór de bewerking, en als het negatief is, wordt de bewerking niet uitgevoerd.

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

Trigger aanmaakpatroon

Het typische patroon voor het aanmaken van triggers is als volgt: eerst wordt een functie gedefinieerd om specifieke logica uit te voeren vóór of na een bewerking. Vervolgens wordt deze functie gekoppeld als trigger aan een bepaalde tabel en actie.

Let op de volgende instructie:

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

Hierbij is het mogelijk om UPDATE of DELETE te gebruiken in plaats van de INSERT-bewerking.
Maar let op dat het niet mogelijk is om SELECT-triggers te maken, aangezien de SELECT-instructie geen rijen in de tabel wijzigt!

question mark

Wat is het primaire doel van het gebruik van triggers in een database?

Select the correct answer

Was alles duidelijk?

Hoe kunnen we het verbeteren?

Bedankt voor je feedback!

Sectie 3. Hoofdstuk 1
some-alt