Opgeslagen procedures en triggers in MySQL

Inhoudsopgave

Sommige tools die door de MySQL-database-engine worden geleverd, zijn de: opgeslagen procedures, functies en trigger, die worden gebruikt om transacties of bewerkingen uit te voeren, zoals het invoegen of wijzigen van records.

Opgeslagen procedures zijn kleine programma's die zijn ontwikkeld in SQL-code. Een opgeslagen procedure is een set SQL-opdrachten die samen met de database worden opgeslagen.

Het voordeel van een opgeslagen procedure is dat we deze in elke teksteditor kunnen maken en zelfs op de server, wordt uitgevoerd door de database-engine en is niet toegankelijk voor gebruikers, maar alleen voor de beheerder.

Een opgeslagen procedure stuurt de resultaten naar een toepassing zodat ze op het scherm worden weergegeven om overbelasting van de server te voorkomen, in de zelfstudie:

  • Opgeslagen MYSQL-procedures - Creatie, query's en gegevensinvoegingen

Ik had uitgelegd hoe ze te maken, hier zullen we functies en triggers toevoegen. We zullen een voorbeeld zien in een database van een onroerend goed dat we huurplaats zullen noemen en dan zullen we de tabellen maken.

 - Tabelstructuur voor tabel `real estate` CREATE TABLE IF NOT EXISTS` real estate` (`id` int (11) NOT NULL,` userid` int (11) DEFAULT NULL, `idtype property` int (6) DEFAULT '0 ', `prijs` decimaal (10,2) DEFAULT' 0.00 ',` commissie` decimaal (10,0) NOT NULL, `description` text,` highdate` date DEFAULT' 0000-00-00 ', `provincie id` int (10) DEFAULT NULL, `idlocalidad` int (10) DEFAULT NULL,` adres` varchar (150) DEFAULT NULL, `verdieping en appartement` varchar (100) DEFAULT NULL,` between_streets` text, `idoperation` int (100 ) DEFAULT NULL , `featured` char (3) DEFAULT 'no',` image1` varchar (255) DEFAULT NULL, `image2` varchar (255) DEFAULT NULL,` image3` varchar (255) DEFAULT NULL, `image4` varchar (255) DEFAULT NULL, `old` varchar (100) DEFAULT NULL,` mt2covered` int (11) DEFAULT NULL, `lot_surface` int (11) DEFAULT NULL,` geactiveerd` enum ('yes',' nee ') NOT NULL DEFAULT' si ') MOTOR = MyISAM AUTO_INCREMENT = 196 STANDAARD CHARSET = latin1; - Indices van de tabel `vastgoed` ALTER TABLE` onroerend goed` TOEVOEGEN PRIMAIRE SLEUTEL (`id`);

We zullen nu voor elke transactie een opgeslagen procedure ontwikkelen om een ​​record op te vragen, in te voegen, te wijzigen en te verwijderen.

We kunnen Phpmyadmin gebruiken of een manager zoals Heidisql die gratis is en werkt op Windows of Linux met Wine.

We maken een opgeslagen procedure om de onroerendgoedtabel te doorzoeken:

 DELIMITER // PROCEDURE MAKEN pa_listainemuebles () BEGIN SELECTEREN * VAN eigenschappen; EINDE // DELIMITER;
MYSQL begrijpt dat een statement eindigt met een puntkomma. De DELIMITER-instructie verander het eindteken in een ander teken, volgens afspraak // wordt gebruikt om het einde van de opgeslagen procedure aan te geven, zodat MySQL de opgeslagen procedure niet beëindigt bij het tegenkomen van de eerste puntkomma.

We kunnen naar de Tabblad Routines om elke transactie te zien die we hebben gemaakt en van daaruit kunnen we de code wijzigen, uitvoeren, exporteren of verwijderen.

Om een ​​procedure uit te voeren door op te slaan gebruiken we de CALL commando van de SQL-tabblad of ook vanuit een programmeertaal zoals .NET of Java. Vervolgens roepen we de opgeslagen procedure op die met de opdracht is gemaakt.

 OPROEP pa_listainemuebles ();

Vervolgens zullen we een opgeslagen procedure maken om een ​​eigenschap in te voegen, hiervoor hebben we IN-type parameters nodig, dat wil zeggen, we zullen gegevens en invoervariabelen aan de opgeslagen procedure toewijzen om een ​​transactie uit te voeren, in dit geval slaan we ze op in de database.

 DELIMITER // PROCEDURE MAKEN pa_nuevoinmueble (IN id INT, IN userid INT, IN prijs DECIMAAL, IN commissie DECIMAAL) BEGIN INSERT IN eigendom` (`id`,` userid`, `prijs`,` commissie`) WAARDEN (id, userid ) , prijs, commissie) EINDE // DELIMITER;

VERGROTEN

Vervolgens kunnen we de opgeslagen procedure uitvoeren door de parameters aan te roepen en toe te wijzen.

 OPROEP `pa_newinmueble` ('12 ',' 15 ',' 10.00 ',' 0.05 ')
We kunnen ook gegevens invoeren door de routine vanuit Phpmyadmin uit te voeren.

VERGROTEN

Vervolgens zullen we de opgeslagen procedure maken om een ​​eigenschap te bewerken vanuit de Phpmyadmin-editor, in dit geval zullen we alleen de prijs wijzigen.

We kunnen rollen maken vanuit het Definer-veld waar we een gebruiker kunnen toewijzen die is gedefinieerd in de Mysql-server, in dit geval de rootgebruiker van de localhost-host, zodat deze toegang heeft tot de opgeslagen procedure.
Als we het vanuit SQL-code willen doen, moeten we de volgende opdrachten uitvoeren:

 CREATE DEFINER = `root` @` localhost` PROCEDURE `pa_editarinmueble` (IN` nieuwe eigenschap` DECIMAAL (10,2), IN `eigenschap-id` INT (11)) BEGIN UPDATE eigenschap SET prijs = nieuwe eigenschap WAAR id = eigenschap-id ; EINDE
Je voert het uit en je bent klaar.

Trigger of Triggers gebruiken in Mysql
Een trigger of trigger in MySQL is een set SQL-instructies die afhankelijk zijn van een opgeslagen procedure en worden gebruikt om automatisch te worden uitgevoerd wanneer een bepaalde gebeurtenis in onze database plaatsvindt. Deze gebeurtenissen worden geactiveerd door transacties of verklaringen zoals INSERT, UPDATE en DELETE.

Een voorbeeld is wanneer een wijziging wordt opgeslagen in een register, we automatisch een back-up maken of een auditbestand opnemen om te weten welke gegevens zijn gewijzigd, wanneer en door wie deze zijn gewijzigd. Ze kunnen worden gebruikt voor elke manipulatie die de gegevens beïnvloedt, om nieuwe informatie te ondersteunen of te genereren.

We zullen de vastgoedcontroletabel hieronder maken:

 CREATE TABLE `audit` (` user` VARCHAR (200) NULL DEFAULT NULL, `description` TEXT NULL,` date` DATETIME NULL DEFAULT NULL) COLLATE = 'latin1_swedish_ci' ENGINE = InnoDB
We zullen een trigger maken die een bericht in de audit opslaat als iemand de prijs van een woning wijzigt.
 CREATE DEFINER = `root` @` localhost` TRIGGER `real estate_after_update` NA UPDATE OP` real estate` VOOR ELKE RIJ INVOEGEN IN audit (gebruiker, beschrijving, datum) WAARDEN (gebruiker (), CONCAT ('Prijs onroerend goed gewijzigd', NIEUW.id, '(', OUDE.prijs, ') door (', NIEUW.prijs, ')'), NU ())
Deze trigger wordt automatisch uitgevoerd nadat een prijsupdate plaatsvindt, we kunnen meer velden opnemen als we dat willen, met OUD specificeren we het veld met de waarde vóór de wijziging en met NIEUW specificeren we de nieuw ingevoerde waarde, met NU () specificeren we de datum en huidige tijd.

We creëren een trigger die After Update op eigenschappen als een gebeurtenis zal hebben, dat wil zeggen, nadat een update plaatsvindt in de eigenschappentabel, in dat geval zullen we de gebruiker toevoegen die de wijziging heeft aangebracht, de nieuwe prijs en de vorige prijs.

Ik voer een update uit op een woning:

 BEL `pa_editarinmueble` ('80000', '170')
Dan gaan we naar de controletabel en kunnen we de verandering zien:

We kunnen de resultaten ook zien in een rapport in printweergave van Phpmyadmin. We kunnen zien hoe de gegevens die de eigenschap identificeren, de aangebrachte wijziging en de gebruiker die deze heeft aangebracht zijn opgeslagen, we hebben ook de datum en tijd waarop de wijziging is aangebracht.

Vervolgens zullen we een andere mogelijke toepassing zien als een woning wordt verhuurd, die automatisch de status verandert in niet actief of we maken deze niet beschikbaar.

Hiervoor moeten we een eenvoudige tabel hebben waar we kunnen opslaan welke woning wordt verhuurd, voor een praktisch voorbeeld zullen we niet veel strengheid in de gegevens hebben.

 CREATE TABLE `rentals` (` id` INT (10) NOT NULL, `property id` INT (10) NOT NULL,` tenant-id` INT (11) NOT NULL, PRIMARY KEY (`id`)) COLLATE = 'latin1_swedish_ci ' MOTOR = InnoDB; 
Vervolgens maken we de opgeslagen procedure om een ​​nieuw record in de verhuurtabel in te voegen.
 CREATE DEFINER = `root` @` localhost` PROCEDURE `pa_newrental` (IN` eigenschap id` INT, IN `tenant id` INT) TAAL SQL NIET DETERMINISTISCH BEVAT SQL SQL SECURITY DEFINER COMMENT '' INSERT INTO` rental' (`eigenschap id `,` huurder-ID`) WAARDEN (huurder-ID, huurder-ID)

En dan is de trigger om eigenschappen te wijzigen geactiveerd:

 CREATE DEFINER = `root` @` localhost` TRIGGER `rentals_after_insert` NA INSERT ON` rental` VOOR ELKE RIJ UPDATE onroerend goed SET geactiveerd = 'no' waar id = NIEUW.
Vervolgens roepen we de opgeslagen procedure aan waarbij we de id van het onroerend goed en de id van de klant of huurder die ik huur toewijzen.
 OPROEP voor nieuwe verhuur (170.11)
Vervolgens gaan we naar de onroerendgoedtabel en we zouden moeten zien dat het geactiveerde veld van status verandert ALS het actief is naar NIET, is het actief.

We hebben de voordelen gezien van het gebruik van trigger met opgeslagen procedures in MySQL voor:

  • Controleer en registreer gebeurtenissen of activiteiten voor gegevenswijzigingen in een tabel.
  • De status van een veld wijzigen door machtigingen en acties op een tafel te activeren of te weigeren
  • Het maakt het ook mogelijk om de consistentie van de gegevens te behouden door acties uit te voeren op basis van gebeurtenissen die een of meer tabellen beïnvloeden.
In een andere tutorial gaan we verder met het programmeren van voorwaardelijke structuren en repetitieve structuren in opgeslagen procedures.

Vond je deze Tutorial leuk en heb je eraan geholpen?Je kunt de auteur belonen door op deze knop te drukken om hem een ​​positief punt te geven
wave wave wave wave wave