Lagrade procedurer och utlösare i MySQL

Innehållsförteckning

Några verktyg som tillhandahålls av MySQL -databasmotorn är lagrade procedurer, funktioner och utlösare, som används för att utföra transaktioner eller operationer som att infoga eller ändra poster.

Lagrade procedurer är små program som utvecklats i SQL -kod. En lagrad procedur är en uppsättning SQL -kommandon som lagras tillsammans med databasen.

Fördelen med ett lagrat förfarande är att vi kan skapa det i valfri textredigerare och till och med på servern, det körs av databasmotorn och det är inte tillgängligt för användare utan bara för administratören.

En lagrad procedur skickar sina resultat till en applikation så att den visas på skärmen och undviker överbelastning av servern i självstudien:

  • MYSQL -lagrade procedurer - skapande, förfrågningar och datainlägg

Jag hade förklarat hur man skapar dem, här kommer vi att lägga till funktioner och utlösare. Vi kommer att se ett exempel på en databas över en fastighet som vi kommer att kalla hyra plats och sedan kommer vi att skapa tabellerna.

 - Tabellstruktur för tabell `fastigheter` SKAPA TABELL OM INTE FASTER` fastigheter` (` id` int (11) NOT NULL, `userid` int (11) DEFAULT NULL,` idtype property` int (6) DEFAULT '0 ',' pris 'decimal (10,2) DEFAULT' 0.00 ',' provision 'decimal (10,0) NOT NULL,' beskrivning 'text,' högdatum 'datum DEFAULT' 0000-00-00 ',' provins-id ' int (10) DEFAULT NULL, `idlocalidad` int (10) DEFAULT NULL,` address` varchar (150) DEFAULT NULL, `floor and apartment` 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,` active` enum ('yes', 'no') NOT NULL DEFAULT 'si') ENGINE = MyISAM AUTO_INCREMENT = 196 DEFAULT CHARSET = latin1; - Tabellindex `fastigheter` ALTER TABELL` fastigheter` ADD PRIMARY KEY (` id ');

Vi kommer nu att utveckla ett lagrat förfarande för varje transaktion för att fråga, infoga, ändra och ta bort en post.

Vi kan använda Phpmyadmin eller en chef som Heidisql som är gratis och fungerar på Windows eller Linux med Wine.

Vi skapar en lagrad procedur för att fråga fastighetsbordet:

 DELIMITER // SKAPA FÖRFARANDE pa_listainmuebles () BÖRJA VÄLJ * FRÅN egenskaper; SLUT // DELIMITER;
MYSQL förstår att ett uttalande slutar med ett semikolon. De DELIMITER -uttalande ändra sluttecknet till något annat tecken, med konvention // används för att indikera slutet på den lagrade proceduren så att MySQL inte avslutar den lagrade proceduren när det första semikolonet stöter på.

Vi kan gå till Fliken Rutiner för att se varje transaktion som vi har skapat och därifrån kan vi ändra, exekvera, exportera eller ta bort koden.

För att utföra ett förfarande genom att lagra använder vi RING -kommando från Fliken SQL eller också från ett programmeringsspråk som .NET eller Java. Därefter åberopar vi den lagrade proceduren som skapats med kommandot.

 RING pa_listainmuebles ();

Därefter skapar vi en lagrad procedur för att infoga en egenskap, för detta behöver vi parametrar av typen IN, det vill säga att vi tilldelar data och inmatningsvariabler till den lagrade proceduren för att göra en transaktion, i det här fallet spara dem i databasen.

 DELIMITER // SKAPA FÖRFARANDE pa_nuevoinmueble (IN id INT, IN userid INT, IN price DECIMAL, IN provision DECIMAL) BEGIN INSERT INTO property "(` id`, `userid`,` price`, `provision`) VALUES (id, userid ), pris, provision) SLUT // DELIMITER;

FÖRSTORA

Sedan kan vi utföra det lagrade förfarandet genom att anropa och tilldela parametrarna.

 RING `pa_newinmueble` ('12 ',' 15 ',' 10.00 ',' 0.05 ')
Vi kan också ange data genom att köra rutinen från Phpmyadmin.

FÖRSTORA

Därefter skapar vi den lagrade proceduren för att redigera en egenskap från Phpmyadmin -redigeraren, i detta fall kommer vi bara att ändra priset.

Vi kan skapa roller från Definer -fältet där vi kan tilldela en användare som är definierad i Mysql -servern, i detta fall rotanvändaren för localhost -värden, så att den kan komma åt den lagrade proceduren.
Om vi ​​vill göra det från SQL -kod måste vi utföra följande kommandon:

 SKAPA DEFINER = `root` @` localhost` PROCEDURE `pa_editarinmueble` (IN` ny egenskap` DECIMAL (10,2), IN` egendom id` INT (11)) BÖRJA UPPDATERA fastighet SET pris = ny egendom VAR id = egendom id; SLUTET
Du kör det och du är klar.

Använda Trigger eller Triggers i Mysql
En Trigger eller Trigger i MySQL är en uppsättning SQL -satser som är beroende av en lagrad procedur och som används för att köras automatiskt när en viss händelse inträffar i vår databas. Dessa händelser utlöses av transaktioner eller uttalanden som INSERT, UPDATE och DELETE.

Ett exempel är när en ändring sparas i ett register, vi gör automatiskt en säkerhetskopia eller registrerar en granskningsfil för att veta vilken data som ändrades, när och vem som ändrade den. De kan användas för all manipulation som påverkar data, för att stödja eller generera ny information.

Vi kommer att skapa fastighetsrevisionstabellen nedan:

 SKAPA TABELL `granskning` (` användare` VARCHAR (200) NULL DEFAULT NULL, `description` TEXT NULL,` date` DATETIME NULL DEFAULT NULL) COLLATE = 'latin1_swedish_ci' ENGINE = InnoDB
Vi kommer att skapa en utlösare som sparar ett meddelande vid granskning om någon ändrar priset på en fastighet.
 SKAPA DEFINER = `root` @` localhost` TRIGGER `fastigheter_efter_update` EFTER UPDATE ON` fastigheter` FÖR VARJE RADSINSERT I revision (användare, beskrivning, datum) VÄRDEN (användare (), CONCAT (" Fastighetspriset ändrat ", NEW.id, '(', OLD.price, ') by (', NEW.price, ')'), NU ())
Denna utlösare körs automatiskt efter att en prisuppdatering inträffat, vi kan inkludera fler fält om vi vill, med GAMLA anger vi fältet med värdet före ändringen och med NYTT anger vi det nya värdet som anges, med NU () anger vi datumet och aktuell tid.

Vi skapar en utlösare som kommer att ha After Update på egenskaper som en händelse, det vill säga efter att en uppdatering har inträffat i egenskaperstabellen, i så fall kommer vi att lägga till användaren som gjorde ändringen, det nya priset och det tidigare priset.

Jag utför en uppdatering på en egendom:

 RING `pa_editarinmueble` ('80000', '170')
Sedan går vi till revisionsbordet och vi kan se förändringen:

Vi kan också se resultaten i en rapport i tryckvy från Phpmyadmin. Vi kan se hur data som identifierar egendomen, ändringen som gjorts och användaren som gjorde den har sparats, vi har också datum och tid då ändringen gjordes.

Därefter kommer vi att se en annan möjlig applikation om en fastighet hyrs då som automatiskt ändrar dess status till att inte vara aktiv eller så kommer vi att göra den otillgänglig.

För detta måste vi ha ett enkelt bord där vi ska lagra vilken fastighet som hyrs, för ett praktiskt exempel kommer vi inte att ta mycket noggrannhet i data.

 SKAPA TABELL `uthyrning` (` id` INT (10) NOT NULL, `property id` INT (10) NOT NULL,` hyresgäst -id` INT (11) NOT NULL, PRIMARY KEY (`id`)) COLLATE = 'latin1_swedish_ci 'ENGINE = InnoDB; 
Därefter skapar vi den lagrade proceduren för att infoga en ny post i hyrestabellen.
 SKAPA DEFINER = `root` @` localhost` PROCEDURE `pa_newrental` (IN` fastighets -id` INT, I` hyresgäst -ID` INT) SPRÅK SQL INTE DETERMINISTISK INNEHÅLLER SQL SQL -SÄKERHETSDEFINERARE KOMMENTAR `` INSERT INTO`` Rentals '(`property id' `,` hyresgäst -id`) VÄRDEN (hyresgäst -id, hyresgäst -id)

Och sedan utlösaren för att ändra egenskaper aktiverade:

 SKAPA DEFINER = `root` @` localhost` TRIGGER `Rentals_after_insert` EFTER INSERT ON` Rentals` FÖR VARJE RAD UPPDATERING fastigheter SET aktiverat =` nej 'där id = NYTT. Propertyid
Sedan åberopar vi det lagrade förfarandet där vi tilldelar egenskapens id och klienten eller hyresgästens ID som jag hyr.
 RING för ny uthyrning (170.11)
Därefter går vi till fastighetsbordet och vi bör se att det aktiverade fältet ändrar tillstånd OM det är aktivt för att INTE är aktivt.

Vi har sett fördelarna med att använda trigger med lagrade procedurer i MySQL för:

  • Granska och registrera dataändringshändelser eller aktiviteter i en tabell.
  • Ändra tillståndet för ett fält genom att aktivera eller neka behörigheter och åtgärder på ett bord
  • Det gör det också möjligt att bevara datakonsistensen genom att utföra åtgärder enligt händelser som påverkar en eller flera tabeller.
I en annan handledning fortsätter vi med att programmera villkorliga strukturer och repetitiva strukturer i lagrade procedurer.

Gillade du och hjälpte denna handledning?Du kan belöna författaren genom att trycka på den här knappen för att ge honom en positiv poäng

Du kommer att bidra till utvecklingen av webbplatsen, dela sidan med dina vänner

wave wave wave wave wave