Lære MariaDB -utløsere

Lære MariaDB -utløsere

Hvordan bruke triggere i MariaDB

En trigger er en prosedyre som avfyres automatisk når en modifisering gjøres til en databasetabell. Det er ikke noe alternativ å ringe eller utføre noen trigger manuelt. Hovedformålet med å bruke triggere er å opprettholde databaseintegritet, og det kan brukes med de referensielle integritetsbegrensningene som tvinger integritetsregler. I en DBMS, når en hvilken. Ulike typer triggere støttes av databasen. Utløsere er hovedsakelig kategorisert to måter. Den ene er før trigger og en annen er etter trigger. Før triggere kalles før noen hendelse blir utført i tabellen og etter at triggere blir kalt etter utførelse av enhver hendelse i tabellen. Hvordan du installerer MariaDB og bruker forskjellige typer triggere i MariaDB -databaseserveren på Ubuntu vises i denne opplæringen.

MariaDB -installasjon:

Kjør kommandoen nedenfor for å oppdatere systemet og installere MariaDB -serveren og klienten.

# sudo apt-get update && sudo apt-get installer mariaDB-server mariaDB-client

Skriv 'y ' og trykk Enter for å fullføre installasjonsprosessen.

Kjør følgende kommando for å starte MariaDB -serveren.

# sudo systemctl start mariadb

Sjekk serveren fungerer som den skal eller ikke. Utdataene fra følgende kommando vil vise detaljstatusen til serveren. Utgangen indikerer det MariaDB 10.1.30 Verion kjører.

# sudo systemctl status mariadb

Kjør følgende kommando hvis du vil stoppe serveren. Ikke kjør denne kommandoen nå.

# sudo systemctl stopp mariadb

Sett opp databasen og tabellene

Du må opprette en database og to eller flere tabeller for å sjekke hvordan triggere fungerer. Først av alt, kjør MySQL -klienten for å konfigurere databasen. Det vil be om at rotpassord for å få tilgang til databaseserveren.

# sudo mysql -u root

Opprett en database som heter butikk.

> Opprett databasebutikk;

Velg denne nye databasen:

> Bruk butikk;

Lag tre bord i butikk database for å bruke triggerhandlinger på disse. Her, Produkter, lager og lager_add tabeller opprettes.

Lag bordprodukter
(ID Int (11),
Navn varchar (30) ikke null,
Pris int (11),
Primærnøkkel (ID)
);
Lag tabellaksjer
(Product_id int (11),
Åpning_stock int (11),
Current_stock int (11),
Primærnøkkel (Product_ID)
);
Lag tabell Stocks_add
(Product_id int (11),
entry_date dato,
Mengde int (11),
Primærnøkkel (Product_id, entry_date)
);

Sett inn noen data i disse tre tabellene.

Produkter:

Sett inn produkter sett id = 101, name = "bag", pris = 1000;
Sett inn produkter sett id = 102, name = "penn", pris = 100;
Sett inn produkter sett ID = 103, name = "blyant", pris = 50;

Aksjer:

Sett inn aksjer Set Product_ID = 101, Opening_stock = 200, Current_stock = 100;
Sett inn i aksjer Set Product_id = 102, Opening_stock = 230, Current_stock = 150;
Sett inn aksjer Set Product_ID = 103, Opening_stock = 220, Current_stock = 300;

aksjer_add:

Sett inn i aksjer_add SET PRODUCT_ID = 103, entry_date = "2018-01-01", mengde = 30;
Sett inn i aksjer_add SET PRODUCT_ID = 103, entry_date = "2018-01-02", mengde = 50;
Sett inn i aksjer_add SET PRODUCT_ID = 103, entry_date = "2018-01-03", mengde = 45;

Lag etter trigger

Du kan opprette etter utløser for å gjøre noen handling automatisk etter å ha satt inn eller oppdatert eller slettet poster over en bestemt tabell. Her, Produkter og aksjer Tabeller er valgt for å lage etter slett trigger. Dataene fra lagertabellen avhenger av dataene fra produkttabellen. Så hvis noen post blir fjernet fra produkttabellen, må de relaterte postene over aksjer tabellen fjernes. Opprett følgende triggerprosedyre for å slette enhver relatert post fra aksjetabellen automatisk når en registrering fjernes fra produktene tabellen. I denne utløseren gjenkjennes den slettede IDen av gammel.id.

Avgrensning //
Lag triggerprodukter_after_delete
Etter sletting
På produkter for hver rad
BEGYNNE
Slett fra aksjer der produkt_id = gammel.id;
SLUTT;
//


Etter at trigger er opprettet for produktbord. Nå må du teste at Trigger fungerer som den skal eller ikke. Kjør følgende spørring for å fjerne en post fra produkter der id er 101 og sjekk dataene til både produkter og aksjer tabeller. Etter å ha utført spørringen vil du finne at relatert registrering av lagerbord fjernes etter utløser. Ingen post for ID -verdi, 101, vil bli funnet i begge tabellene.

> Slett fra produkter der ID = 101;
> Velg * fra produkter;
> Velg * fra aksjer;

Lag før triggere

Før trigger brukes til å iverksette tiltak før du setter inn eller oppdaterer eller sletter noen eller flere poster fra en bestemt tabell. Her, aksjer og aksjer_add Tabell brukes til å lage før trigger. Verdien av Current_stock of Stocks -tabellen avhenger av mengdeverdien på Stocks_add -tabellen. Hvis du oppdaterer en mengdeverdi på aksjens. Så hvis noen eksisterende mengdeverdien på aksjer_addabellen synker, vil Current_stock av aksjer bli redusert, og hvis mengdeverdien øker, vil Current_stock bli økt. Lag før oppdatering av Trigger for Stocks_add -tabellen. I denne utløseren beregnes den endrede mengdeverdien ved å trekke fra gammel mengde fra ny mengde.

Avgrensning //
Lag Trigger Stocks_before_update
Før oppdatering
På aksjer_add for hver rad
BEGYNNE
Oppdater aksjer sett Current_stock = Current_stock+(ny.mengde gammel.mengde)
Hvor produkt_id = gammel.Produkt ID;
SLUTT;
//

Før du oppdaterer, sjekk gjeldende verdier for både aksjer og aksjer_addabeller.

> Velg * fra aksjer;
> Velg * fra Stocks_add;


Anta at du må oppdatere mengdeverdien på tabellen Stocks_add hvor Produkt ID er 103 og Påmeldingsfrist er 2018-01-01 som er 30 nå. Hvis du vil oppdatere verdien av 75 Kjør deretter følgende oppdateringsspørsmål og sjekk begge tabellene igjen. Den økte mengden er, 75-30 = 45. Så etter oppdatering vil utløseren bli avfyrt og Current_stock of Stocks Table vil bli satt som, 300+45 = 345.

Oppdater aksjer_add Sett kvantitet = 75 hvor produkt_id = 103 og entry_date = "2018-01-01";
> Velg * fra aksjer;
> Velg * fra Stocks_add;

Bruken av to typer triggere vises i denne opplæringen. På samme måte kan du opprette andre typer før og etter utløser for databasetabellene dine basert på dine krav.