Pohranjeni postupci i okidači u MySQL -u

Sadržaj

Neki alati koje pruža motor baze podataka MySQL su pohranjene procedure, funkcije i okidač, koji se koriste za obavljanje transakcija ili operacija kao što je umetanje ili mijenjanje zapisa.

Pohranjeni postupci mali su programi razvijeni u SQL kodu. Pohranjena procedura je skup SQL naredbi koje su pohranjene zajedno s bazom podataka.

Prednost pohranjene procedure je u tome što je možemo stvoriti u bilo kojem uređivaču teksta, pa čak i na poslužitelju, izvršava je mehanizam baze podataka i nije dostupna korisnicima, već samo administratoru.

Pohranjena procedura šalje svoje rezultate aplikaciji tako da ih prikazuje na zaslonu izbjegavajući preopterećenje poslužitelja, u vodiču:

  • MYSQL pohranjeni postupci - stvaranje, upiti i umetci podataka

Objasnio sam kako ih stvoriti, ovdje ćemo dodati funkcije i okidače. Vidjet ćemo primjer u bazi podataka nekretnine koju ćemo nazvati stanom za iznajmljivanje, a zatim ćemo stvoriti tablice.

 - Struktura tablice za tablicu `nekretnine` IZRADI TABLICU AKO NE POSTOJI` nekretnina` (`id` int (11) NOT NULL,` userid` int (11) DEFAULT NULL, `idtype property` int (6) DEFAULT '0 ', `price` decimal (10,2) DEFAULT' 0.00 ',` Commission` decimal (10,0) NOT NULL, `description` text,` highdate` date DEFAULT' 0000-00-00 ', `province 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,` enabled` enum ('yes', 'no') NOT NULL DEFAULT 'si') MOTOR = MyISAM AUTO_INCREMENT = 196 ZADNJA KARTA = latin1; - Indeksi tablice `nekretnine` ALTER TABELA` nekretnine` DODAJ PRIMARNI KLJUČ (` id`);

Sada ćemo razviti pohranjenu proceduru za svaku transakciju za postavljanje upita, umetanje, izmjenu i brisanje zapisa.

Možemo koristiti Phpmyadmin ili upravitelja poput Heidisqla koji je besplatan i radi na Windowsima ili Linuxu s Wineom.

Izrađujemo pohranjenu proceduru za ispitivanje tablice nekretnina:

 DELIMITER // CREATE PROCEDURE pa_listainmuebles () BEGIN SELECT * FROM properties; KRAJ // DELIMITER;
MYSQL razumije da izraz završava točkom -zarezom. The DELIMITER izjava promijenite završni znak u bilo koji drugi znak, prema dogovoru // koristi se za označavanje kraja pohranjene procedure tako da MySQL ne završi pohranjenu proceduru kada naiđe na prvu točku -zarez.

Možemo otići na Kartica Rutines da biste vidjeli svaku transakciju koju smo stvorili i odatle možemo mijenjati, izvršavati, izvoziti ili brisati kôd.

Za izvršavanje postupka pohranjivanjem koristimo Naredba CALL od SQL kartica ili također iz programskog jezika poput .NET -a ili Jave. Zatim pozivamo pohranjenu proceduru stvorenu naredbom.

 POZOVITE pa_listainmuebles ();

Zatim ćemo stvoriti pohranjenu proceduru za umetanje svojstva, za to će nam trebati parametri tipa IN, odnosno dodijelit ćemo podatke i ulazne varijable pohranjenoj proceduri za obavljanje transakcije, u ovom slučaju ih spremiti u bazu podataka.

 DELIMITER // CREATE PROCEDURE pa_nuevoinmueble (IN id INT, IN userid INT, IN price DECIMAL, IN Commission DECIMAL) BEGIN INSERT INTO property` (`id`,` userid`, `price`,` Commission`) VRIJEDNOSTI (id, userid ), cijena, provizija) END // DELIMITER;

POVEĆAJTE

Tada možemo izvršiti pohranjenu proceduru pozivanjem i dodjeljivanjem parametara.

 POZOVITE `pa_newinmueble` ('12 ',' 15 ',' 10.00 ',' 0.05 ')
Također možemo unijeti podatke pokretanjem rutine iz Phpmyadmina.

POVEĆAJTE

Zatim ćemo stvoriti pohranjenu proceduru za uređivanje svojstva iz uređivača Phpmyadmina, u ovom slučaju samo ćemo promijeniti cijenu.

Uloge možemo stvoriti iz polja Definer gdje možemo dodijeliti korisnika definiranog na poslužitelju Mysql, u ovom slučaju korijenskog korisnika host računala localhost, tako da može pristupiti pohranjenoj proceduri.
Ako to želimo učiniti iz SQL koda, moramo izvršiti sljedeće naredbe:

 CREATE DEFINER = `root` @` localhost` POSTUPAK `pa_editarinmueble` (IN` novo svojstvo` DECIMAL (10,2), IN `svojstvo ID` INT (11)) POČNITE AŽURIRANJE SET SET cijena = novo svojstvo WHERE id = ID svojstva ; KRAJ
Pokrenete ga i gotovi ste.

Korištenje okidača ili okidača u Mysqlu
Okidač ili okidač u MySQL -u skup je SQL izraza koji ovise o pohranjenoj proceduri i koriste se za automatsko pokretanje kada se u našoj bazi podataka dogodi određeni događaj. Ove događaje pokreću transakcije ili izrazi poput INSERT, UPDATE i DELETE.

Primjer je kada se promjena spremi u registar, automatski napravimo sigurnosnu kopiju ili snimimo revizijsku datoteku kako bismo znali koji su podaci promijenjeni, kada i tko ih je promijenio. Mogu se koristiti za bilo koju manipulaciju koja utječe na podatke, za podršku ili generiranje novih informacija.

U nastavku ćemo izraditi tablicu revizije nekretnina:

 CREATE TABLE `audit` (` user` VARCHAR (200) NULL DEFAULT NULL, `description` TEXT NULL,` date` DATETIME NULL DEFAULT NULL) COLLATE = 'latin1_swedish_ci' MOTOR = InnoDB
Izradit ćemo okidač koji sprema poruku u reviziju ako netko promijeni cijenu nekretnine.
 CREATE DEFINER = `root` @` localhost` TRIGGER `real estate_after_update` AFTER UPDATE ON` nekretnine` ZA SVAKI RED UMETNITE U REVIZIJU (korisnik, opis, datum) VRIJEDNOSTI (korisnik (), CONCAT ('Cijena nekretnine promijenjena', NEW.id, '(', OLD.price, ') by (', NEW.price, ')'), NOW ())
Ovaj se okidač automatski izvršava nakon ažuriranja cijene. Ako želimo, možemo uključiti još polja, s OLD -om navodimo polje s vrijednošću prije izmjene, a s NEW određujemo unesenu novu vrijednost, s NOW () određujemo datum i trenutno vrijeme.

Kreiramo okidač koji će imati svojstva Nakon ažuriranja svojstava kao događaj, to jest nakon što dođe do ažuriranja u tablici svojstava, u tom slučaju ćemo dodati korisnika koji je napravio izmjenu, novu cijenu i prethodnu cijenu.

Izvršim ažuriranje nekretnine:

 CALL `pa_editarinmueble` ('80000', '170')
Zatim idemo na revizijsku tablicu i možemo vidjeti promjenu:

Rezultate također možemo vidjeti u izvješću u ispisu iz Phpmyadmina. Možemo vidjeti kako su spremljeni podaci koji identificiraju svojstvo, napravljenu promjenu i korisnika koji ju je napravio, imamo i datum i vrijeme promjene.

Zatim ćemo vidjeti još jednu moguću aplikaciju ako se nekretnina iznajmi, koja automatski mijenja svoj status u neaktivnu ili ćemo je učiniti nedostupnom.

Za to moramo imati jednostavnu tablicu gdje ćemo pohraniti koja se nekretnina iznajmljuje, za praktični primjer nećemo uzeti previše strogosti u podatke.

 CREATE TABLE `rentals` (` id` INT (10) NOT NULL, `property id` INT (10) NOT NULL,` stanar id` INT (11) NOT NULL, PRIMARY KEY (`id`)) COLLATE = 'latin1_swedish_ci 'MOTOR = InnoDB; 
Zatim ćemo stvoriti pohranjenu proceduru za umetanje novog zapisa u tablicu iznajmljivanja.
 CREATE DEFINER = `root` @` localhost` POSTUPAK `pa_newrental` (IN` svojstvo ID` INT, IN` stanar id` INT) JEZIK SQL NIJE DETERMINISTIČKI SADRŽI SQL SQL SIGURNOSNI DEFINER KOMENTAR '' UMETI U 'iznajmljivanje' (`ID svojstva `,` stanar id`) VALUES (stanar id, stanar id)

A onda je aktiviran okidač za izmjenu svojstava:

 CREATE DEFINER = `root` @` localhost` TRIGGER `rentals_after_insert` AFTER INSERT ON` iznajmljuje` ZA SVAKI RED UPDATE nekretnina SET = 'ne' gdje je id = NOVO. Propertyid
Zatim dozivamo pohranjenu proceduru gdje dodjeljujemo ID nekretnine i id klijenta ili stanara koje iznajmljujem.
 POZIV za novi najam (170.11)
Zatim idemo na tablicu nekretnina i trebali bismo vidjeti da je aktivirano mijenjanje stanja stanja AKO je aktivno da NE nije aktivno.

Vidjeli smo prednosti korištenja okidača sa pohranjenim procedurama u MySQL -u za:

  • Revizirati i zabilježiti događaje ili aktivnosti promjene podataka u tablici.
  • Promijenite stanje polja aktiviranjem ili odbijanjem dopuštenja i radnjama na tablici
  • Također omogućuje očuvanje dosljednosti podataka izvršavanjem radnji prema događajima koji utječu na jednu ili više tablica.
U drugom vodiču nastavit ćemo s programiranjem uvjetnih struktura i struktura koje se ponavljaju u pohranjenim procedurama.

Je li vam se svidio i pomogao ovaj vodič?Autor možete nagraditi pritiskom na ovaj gumb kako biste mu dali pozitivan bod
wave wave wave wave wave