Išsaugotos procedūros ir aktyvikliai „MySQL“

Turinys

Kai kurie „MySQL“ duomenų bazės variklio įrankiai yra saugomos procedūros, funkcijas ir paleidiklį, kurie naudojami operacijoms ar operacijoms atlikti, pvz., įterpti ar keisti įrašus.

Išsaugotos procedūros yra mažos programos, sukurtos naudojant SQL kodą. Išsaugota procedūra yra SQL komandų rinkinys, saugomas kartu su duomenų baze.

Išsaugotos procedūros pranašumas yra tas, kad ją galime sukurti bet kuriame teksto rengyklėje ir net serveryje, ją vykdo duomenų bazės variklis ir ji nėra prieinama vartotojams, o tik administratoriui.

Išsaugota procedūra siunčia savo rezultatus į programą, kad ji juos parodytų ekrane, išvengdama serverio perkrovimo, vadove:

  • „MYSQL“ išsaugotos procedūros - kūrimas, užklausos ir duomenų intarpai

Aš paaiškinau, kaip juos sukurti, čia pridėsime funkcijas ir aktyviklius. Pamatysime pavyzdį nekilnojamojo turto, kurį vadinsime nuomos vieta, duomenų bazėje ir tada sukursime lenteles.

 - Lentelės „nekilnojamasis turtas“ lentelės struktūra KURTI LENTELĘ, KAD NĖRA „nekilnojamasis turtas“ („id“ int (11) NOT NULL, „userid“ int (11) DEFAULT NULL, „idtype property“ int (6) DEFAULT “0 "," kaina "dešimtainis (10,2) Numatytasis" 0,00 "," komisinis "dešimtainis (10,0) NOT NULL," aprašymo "tekstas," highdate "data DEFAULT '0000-00-00'," provincijos 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, "matomas" char (3) DEFAULT "ne", "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, "aktivuotas" enum ("taip", "ne") NE NULL DEFAULT 'si') VARIKLIS = MyISAM AUTO_INCREMENT = 196 DEFAULT CHARSET = latin1; - lentelės "nekilnojamasis turtas" ALTER TABLE "nekilnojamasis turtas" PRIDĖTI PAGRINDINĮ RAKTĄ ("id") indeksai;

Dabar kiekvienai operacijai sukursime saugomą procedūrą, skirtą įrašui užklausti, įterpti, keisti ir ištrinti.

Mes galime naudoti „Phpmyadmin“ arba valdytoją, pvz., „Heidisql“, kuris yra nemokamas ir veikia „Windows“ arba „Linux“ su „Wine“.

Sukuriame saugomą nekilnojamojo turto lentelės užklausos procedūrą:

 DELIMITER // KURTI PROCEDŪRĄ pa_listainmuebles () BEGIN SELECT * FROM Properties; PABAIGA // DELIMITER;
MYSQL supranta, kad teiginys baigiasi kabliataškiu. The DELIMITER teiginys pakeiskite pabaigos simbolį į bet kurį kitą simbolį, pagal susitarimą // naudojamas nurodant išsaugotos procedūros pabaigą, kad MySQL nesibaigtų išsaugota procedūra susidūrus su pirmuoju kabliataškiu.

Galime eiti į Įprastų veiksmų skirtukas norėdami pamatyti kiekvieną mūsų sukurtą operaciją ir iš ten galime keisti, vykdyti, eksportuoti arba ištrinti kodą.

Norėdami atlikti procedūrą saugodami, naudojame Komanda CALL nuo SQL skirtukas taip pat iš programavimo kalbos, pvz., .NET arba „Java“. Tada mes iškviečiame išsaugotą procedūrą, sukurtą naudojant komandą.

 CALL pa_listainmuebles ();

Toliau sukursime išsaugotą nuosavybės įterpimo procedūrą, tam mums reikės IN tipo parametrų, tai yra, priskirti duomenis ir įvesties kintamuosius saugomai procedūrai atlikti, šiuo atveju išsaugoti juos duomenų bazėje.

 DELIMITER // KURTI PROCEDŪRĄ pa_nuevoinmueble (IN id INT, IN userid INT, IN DECIMAL, IN Commission DECIMAL) BEGIN INSERT INTO property “(„ id “,„ userid “,„ price “,„ Commission “) VERTĖS (id, userid ), kaina, komisinis mokestis) PABAIGA // DELIMITER;

DIDELIS

Tada mes galime atlikti išsaugotą procedūrą, iškviesdami ir priskirdami parametrus.

 SKAMBINTI „pa_newinmueble“ („12“, „15“, „10.00“, „0.05“)
Duomenis taip pat galime įvesti vykdydami įprastą „Phpmyadmin“ programą.

DIDELIS

Tada sukursime išsaugotą nuosavybės redagavimo procedūrą iš „Phpmyadmin“ redaktoriaus, šiuo atveju pakeisime tik kainą.

Mes galime sukurti vaidmenis iš „Definer“ lauko, kur galime priskirti „Mysql“ serveryje apibrėžtą vartotoją, šiuo atveju - pagrindinį „localhost“ pagrindinio kompiuterio vartotoją, kad jis galėtų pasiekti išsaugotą procedūrą.
Jei norime tai padaryti iš SQL kodo, turime vykdyti šias komandas:

 CREATE DEFINER = "root" @"localhost" PROCEDŪRA "pa_editarinmueble" (IN "new property" DECIMAL (10,2), IN "property ID" INT (11)) BEGIN UPDATE property SET price = nauja nuosavybė WHERE id = property id ; GALAS
Paleidi ir baigsi.

Trigger arba Triggers naudojimas „Mysql“
„MySQL“ aktyviklis arba aktyviklis yra SQL teiginių rinkinys, priklausantis nuo išsaugotos procedūros ir naudojamas automatiškai paleisti, kai mūsų duomenų bazėje įvyksta tam tikras įvykis. Šiuos įvykius sukelia tokios operacijos ar ataskaitos, kaip INSERT, UPDATE ir DELETE.

Pavyzdžiui, kai pakeitimas išsaugomas registre, mes automatiškai sukuriame atsarginę kopiją arba įrašome audito failą, kad žinotume, kokie duomenys buvo pakeisti, kada ir kas juos pakeitė. Jie gali būti naudojami bet kokiam manipuliavimui, turinčiam įtakos duomenims, palaikyti ar generuoti naują informaciją.

Mes sukursime žemiau esančią nekilnojamojo turto audito lentelę:

 KURTI LENTELĘ „auditas“ („naudotojas“ VARCHAR (200) NULL DEFAULT NULL, „description“ TEXT NULL, „date“ DATETIME NULL DEFAULT NULL) COLLATE = 'latin1_swedish_ci' ENGINE = InnoDB
Mes sukursime aktyviklį, kuris išsaugos pranešimą audito metu, jei kas nors pakeis nuosavybės kainą.
 CREATE DEFINER = "root" @"localhost" TRIGGER "real estate_after_update" AFTER UPDATE ON "nekilnojamasis turtas" KIEKVIENAI EILEI Įterpti į auditą (naudotojas, aprašymas, data) VERTĖS (vartotojas (), CONCAT ("Nekilnojamojo turto kaina pasikeitė", NEW.id, '(', OLD.price, ') pagal (', NEW.price, ')'), DABAR ())
Šis aktyviklis vykdomas automatiškai po to, kai atnaujinama kaina, jei pageidaujame, galime įtraukti daugiau laukų, o OLD nurodome lauką su reikšme prieš pakeitimą, o su NEW nurodome naują įvestą vertę, o DABAR () nurodome datą ir dabartinis laikas.

Sukuriame aktyviklį, kurio ypatybės po įvykio bus atnaujintos, tai yra, įvykus ypatybių lentelės atnaujinimui, tokiu atveju pridėsime pakeitimą atlikusį vartotoją, naują kainą ir ankstesnę kainą.

Atlieku nuosavybės atnaujinimą:

 CALL „pa_editarinmueble“ („80000“, „170“)
Tada mes einame prie audito lentelės ir matome pokyčius:

Rezultatus taip pat galime pamatyti „Phpmyadmin“ atspausdintoje ataskaitoje. Matome, kaip buvo išsaugoti nuosavybę identifikuojantys duomenys, atliktas pakeitimas ir jį atlikęs vartotojas, taip pat turime pakeitimo datą ir laiką.

Toliau matysime kitą galimą taikomąją programą, jei nekilnojamasis turtas bus išsinuomotas ir automatiškai pakeis jo būseną į neaktyvų arba padarysime jį nepasiekiamą.

Norėdami tai padaryti, turime turėti paprastą lentelę, kur saugoti nuomojamą turtą. Praktiniam pavyzdžiui mes nesiimsime daug duomenų.

 KURTI LENTELĘ `nuoma` 'VARIKLIS = InnoDB; 
Toliau sukursime išsaugotą procedūrą, skirtą įterpti naują įrašą į nuomos lentelę.
 CREATE DEFINER = "root" @"localhost" PROCEDURA "pa_newrental" (IN "property id" INT, IN "nuomininko ID" INT) KALBA SQL NĖRA NUSTATOMAS SUDĖTIS SQL SQL SECURITY DEFINER COMMENT "INSERT INTO" rentals `,` nuomininko ID`) VALUES (nuomininko ID, nuomininko ID)

Tada suaktyvinamas aktyviklis, norint pakeisti savybes:

 CREATE DEFINER = "root" @"localhost" TRIGGER "rentals_after_insert" AFTER INSERT ON "rentals" KIEKVIENAI EILEI ATNAUJINTI nekilnojamojo turto rinkinį suaktyvinta = "ne", kur id = NEW. Propertyid
Tada mes pasinaudojame saugoma procedūra, kai priskiriame turto ID ir mano nuomojamo kliento ar nuomininko ID.
 KVIETIMAS dėl naujos nuomos (170.11)
Toliau einame prie nekilnojamojo turto lentelės ir turėtume pamatyti, kad aktyvuotas lauko būsenos keitimas, jei jis aktyvus, NE, jis yra aktyvus.

Mes matėme pranašumus naudojant trigerį su saugomomis procedūromis „MySQL“:

  • Patikrinkite ir įrašykite duomenų keitimo įvykius ar veiklą į lentelę.
  • Pakeiskite lauko būseną suaktyvindami arba atmesdami leidimus ir veiksmus lentelėje
  • Tai taip pat leidžia išsaugoti duomenų nuoseklumą vykdant veiksmus pagal įvykius, turinčius įtakos vienai ar kelioms lentelėms.
Kitoje pamokoje mes toliau programuosime sąlygines struktūras ir pasikartojančias struktūras saugomose procedūrose.

Ar jums patiko ir padėjo ši pamoka?Galite apdovanoti autorių paspausdami šį mygtuką, kad suteiktumėte jam teigiamą tašką
wave wave wave wave wave