Nogle værktøjer fra MySQL -databasemotoren er lagrede procedurer, funktioner og trigger, der bruges til at udføre transaktioner eller operationer såsom indsætning eller ændring af poster.
Lagrede procedurer er små programmer udviklet i SQL -kode. En lagret procedure er et sæt SQL -kommandoer, der gemmes sammen med databasen.
Fordelen ved en lagret procedure er, at vi kan oprette den i enhver tekstredigerer og endda på serveren, den udføres af databasemotoren, og den er ikke tilgængelig for brugere, men kun for administratoren.
En lagret procedure sender sine resultater til et program, så det viser dem på skærmen for at undgå overbelastning af serveren i selvstudiet:
- MYSQL -lagrede procedurer - oprettelse, forespørgsler og dataindsatser
Jeg havde forklaret, hvordan man opretter dem, her tilføjer vi funktioner og udløsere. Vi vil se et eksempel på en database over en fast ejendom, som vi vil kalde lejeplads, og derefter opretter vi tabellerne.
- Tabelstruktur for tabellen `fast ejendom` Opret tabel, hvis den ikke findes` fast ejendom` (` id` int (11) NOT NULL, `userid` int (11) DEFAULT NULL,` idtype property` int (6) DEFAULT '0 ',' pris 'decimal (10,2) DEFAULT' 0.00 ',' kommission 'decimal (10,0) IKKE NULL,' beskrivelse 'tekst,' højdato 'dato 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,` aktiveret` enum ('ja', 'nej') IKKE NULL DEFAULT 'si') ENGINE = MyISAM AUTO_INCREMENT = 196 DEFAULT CHARSET = latin1; - Indekser i tabellen `fast ejendom` ALTER TABLE` fast ejendom` TILFØJ PRIMÆR NØGLE (` id ');
Vi vil nu udvikle en lagret procedure for hver transaktion til at forespørge, indsætte, ændre og slette en post.
Vi kan bruge Phpmyadmin eller en manager som Heidisql, der er gratis og fungerer på Windows eller Linux med Wine.
Vi opretter en lagret procedure til forespørgsel på ejendomsbordet:
DELIMITER // OPRET PROCEDURE pa_listainmuebles () BEGYNG VÆLG * FRA egenskaber; SLUT // DELIMITER;MYSQL forstår, at en erklæring slutter med et semikolon. Det DELIMITER -erklæring ændre sluttegnet til et hvilket som helst andet tegn, ved konvention // bruges til at angive slutningen af den lagrede procedure, så MySQL ikke afslutter den lagrede procedure, når det første semikolon støder på.
Vi kan gå til Fanen Rutiner for at se hver transaktion, vi har oprettet, og derfra kan vi ændre, eksekvere, eksportere eller slette koden.
For at udføre en procedure ved at gemme bruger vi CALL kommando fra Fanen SQL eller også fra et programmeringssprog som .NET eller Java. Dernæst påberåber vi den lagrede procedure, der er oprettet med kommandoen.
CALL pa_listainmuebles ();
Dernæst opretter vi en lagret procedure for at indsætte en ejendom, til dette skal vi bruge IN -type parametre, det vil sige, vi vil tildele data og inputvariabler til den lagrede procedure for at foretage en transaktion, i dette tilfælde gemme dem i databasen.
DELIMITER // OPRET PROCEDURE pa_nuevoinmueble (IN id INT, IN userid INT, IN price DECIMAL, IN provision DECIMAL) BEGIN INSERT INTO property "(` id`, `userid`,` price`, `provision`) VÆRDIER (id, userid ), pris, provision) END // DELIMITER;
FORSTØRRE
Derefter kan vi udføre den lagrede procedure ved at påberåbe og tildele parametrene.
RING `pa_newinmueble` ('12 ',' 15 ',' 10.00 ',' 0.05 ')Vi kan også indtaste data ved at køre rutinen fra Phpmyadmin.
FORSTØRRE
Dernæst opretter vi den lagrede procedure til redigering af en ejendom fra Phpmyadmin -editoren, i dette tilfælde ændrer vi kun prisen.
Vi kan oprette roller fra Definer -feltet, hvor vi kan tildele en bruger, der er defineret i Mysql -serveren, i dette tilfælde root -brugeren til localhost -værten, så den kan få adgang til den lagrede procedure.
Hvis vi vil gøre det fra SQL -kode, skal vi udføre følgende kommandoer:
CREATE DEFINER = `root` @` localhost` PROCEDURE `pa_editarinmueble` (IN` new property` DECIMAL (10,2), IN` property id` INT (11)) BEGIN UPDATE property SET price = new property WHERE id = property id; ENDEDu kører det, og du er færdig.
Brug af Trigger eller Triggers i Mysql
En Trigger eller Trigger i MySQL er et sæt SQL -sætninger, der er afhængige af en lagret procedure og bruges til at køre automatisk, når en bestemt hændelse opstår i vores database. Disse hændelser udløses af transaktioner eller udsagn som INSERT, UPDATE og DELETE.
Et eksempel er, når en ændring gemmes i en registreringsdatabase, laver vi automatisk en sikkerhedskopi eller registrerer en revisionsfil for at vide, hvilke data der blev ændret, hvornår og hvem der ændrede dem. De kan bruges til enhver manipulation, der påvirker dataene, til at understøtte eller generere ny information.
Vi opretter nedenstående tabel med fast ejendomsrevision:
OPRET TABEL `revision` (` bruger` VARCHAR (200) NULL DEFAULT NULL, `beskrivelse` TEKST NULL,` dato` DATETIME NULL DEFAULT NULL) COLLATE = 'latin1_swedish_ci' ENGINE = InnoDBVi opretter en trigger, der gemmer en besked i revisionen, hvis nogen ændrer prisen på en ejendom.
CREATE DEFINER = `root` @` localhost` TRIGGER `fast ejendom_after_opdatering` EFTER OPDATERING på` fast ejendom` FOR HVER RÆKKEINSÆT TIL revision (bruger, beskrivelse, dato) VÆRDIER (bruger (), CONCAT ('Ejendomspris ændret', NEW.id, '(', OLD.price, ') af (', NEW.price, ')'), NU ())Denne trigger udføres automatisk efter en prisopdatering, vi kan inkludere flere felter, hvis vi ønsker det, med GAMLE angiver vi feltet med værdien før ændringen, og med NY angiver vi den nye værdi, med NU () angiver vi datoen og aktuel tid.
Vi opretter en trigger, der vil have After Update på egenskaber som en hændelse, det vil sige, efter at der er foretaget en opdatering i egenskabstabellen, i så fald tilføjer vi den bruger, der foretog ændringen, den nye pris og den tidligere pris.
Jeg udfører en opdatering på en ejendom:
RING `pa_editarinmueble` ('80000', '170')Derefter går vi til revisionsbordet, og vi kan se ændringen:
Vi kan også se resultaterne i en rapport i printvisning fra Phpmyadmin. Vi kan se, hvordan de data, der identificerer ejendommen, ændringen er foretaget og brugeren, der har foretaget den, er blevet gemt, vi har også dato og klokkeslæt for ændringen.
Dernæst ser vi en anden mulig applikation, hvis en ejendom lejes, så ændrer den automatisk status til ikke aktiv, eller vi gør den utilgængelig.
Til dette skal vi have et simpelt bord, hvor vi skal gemme, hvilken ejendom der lejes, for et praktisk eksempel vil vi ikke tage meget stringens i dataene.
OPRET TABEL `huslejer` (` id` INT (10) IKKE NULL, `ejendoms -id` INT (10) IKKE NULL,` lejer -id` INT (11) IKKE NULL, PRIMÆR NØGLE (`id`)) COLLATE = 'latin1_swedish_ci 'MOTOR = InnoDB;Dernæst opretter vi den lagrede procedure for at indsætte en ny rekord i udlejningstabellen.
CREATE DEFINER = `root` @` localhost` PROCEDURE `pa_newrental` (IN` property id` INT, IN` tenant id` INT) SPROG SQL IKKE DETERMINISTISK INDEHOLDER SQL SQL SECURITY DEFINER COMMENT 'INSERT INTO` Rentals' (`property id ' `,` lejer -id`) VÆRDIER (lejer -id, lejer -id)
Og derefter udløseren til at ændre egenskaber aktiveret:
CREATE DEFINER = `root` @` localhost` TRIGGER `Rentals_after_insert` EFTER INSERT ON` Rentals` FOR HVER ROW UPDATE fast ejendom SET aktiveret = 'nej' hvor id = NYT. PropertyidDerefter påberåber vi os den lagrede procedure, hvor vi tildeler ejendommens id og klientens eller lejerens id, som jeg lejer.
OPKALD til ny udlejning (170.11)Dernæst går vi til ejendomsbordet, og vi skal se, at det aktiverede felt ændrer tilstand, hvis det er aktivt til IKKE det er aktivt.
Vi har set fordelene ved at bruge trigger med lagrede procedurer i MySQL til:
- Revider og registrer dataændringshændelser eller aktiviteter i en tabel.
- Skift et felts tilstand ved at aktivere eller nægte tilladelser og handlinger på et bord
- Det giver også mulighed for at bevare konsistensen af dataene ved at udføre handlinger i henhold til hændelser, der påvirker en eller flere tabeller.