Daži rīki, ko nodrošina MySQL datu bāzes dzinējs, ir saglabātās procedūras, funkcijas un sprūda, ko izmanto, lai veiktu darījumus vai darbības, piemēram, ierakstu ievietošanu vai pārveidošanu.
Saglabātās procedūras ir nelielas programmas, kas izstrādātas SQL kodā. Saglabāta procedūra ir SQL komandu kopa, kas tiek glabāta kopā ar datu bāzi.
Saglabātas procedūras priekšrocība ir tā, ka mēs to varam izveidot jebkurā teksta redaktorā un pat serverī, to izpilda datu bāzes dzinējs, un tas nav pieejams lietotājiem, bet tikai administratoram.
Saglabāta procedūra nosūta savus rezultātus lietojumprogrammai, lai tā tos parādītu ekrānā, izvairoties no servera pārslodzes.
- MYSQL saglabātās procedūras - izveide, vaicājumi un datu ieliktņi
Es biju paskaidrojis, kā tos izveidot, šeit mēs pievienosim funkcijas un aktivizētājus. Mēs redzēsim piemēru kāda nekustamā īpašuma datu bāzē, ko mēs sauksim par īres vietu, un tad mēs izveidosim tabulas.
- Tabulas struktūra nekustamajam īpašumam CREATE TABLE IF NOT NOTISTS nekustamais īpašums "(" id "int (11) NOT NULL," userid "int (11) DEFAULT NULL," idtype property "int (6) DEFAULT '0 ', `cena` decimāldaļa (10,2) DEFAULT' 0,00 ',` komisija` decimāldaļa (10,0) NOT NULL, `apraksta teksts,` 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 "nē", "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, "aktivizēts" enum ("jā", "nē") NOT NULL DEFAULT 'si') ENGINE = MyISAM AUTO_INCREMENT = 196 DEFAULT CHARSET = latin1; - tabulas indeksi "nekustamais īpašums" ALTER TABLE "nekustamais īpašums" PIEVIENOT PRIMĀRO ATSLĒGU ("id");
Tagad mēs izstrādāsim uzglabāšanas procedūru katram darījumam, lai vaicātu, ievietotu, mainītu un dzēstu ierakstu.
Mēs varam izmantot Phpmyadmin vai tādu pārvaldnieku kā Heidisql, kas ir bezmaksas un darbojas operētājsistēmā Windows vai Linux ar Wine.
Mēs izveidojam saglabātu procedūru, lai vaicātu nekustamā īpašuma tabulu:
DELIMITER // CREATE PROCEDURE pa_listainmuebles () BEGIN SELECT * FROM rekvizīti; END // DELIMITER;MYSQL saprot, ka paziņojums beidzas ar semikolu. DELIMITER priekšraksts mainiet beigu rakstzīmi uz jebkuru citu rakstzīmi, pēc vienošanās // tiek izmantota, lai norādītu saglabātās procedūras beigas, lai MySQL nebeigtu saglabāto procedūru, saskaroties ar pirmo semikolu.
Mēs varam doties uz Cilne Rutīnas lai redzētu katru mūsu izveidoto darījumu, un no turienes mēs varam modificēt, izpildīt, eksportēt vai dzēst kodu.
Lai veiktu procedūru, saglabājot, mēs izmantojam Komanda CALL no Cilne SQL vai arī no tādas programmēšanas valodas kā .NET vai Java. Tālāk mēs izsaucam saglabāto procedūru, kas izveidota ar komandu.
CALL pa_listainmuebles ();
Tālāk mēs izveidosim saglabātu procedūru rekvizīta ievietošanai, šim nolūkam mums būs nepieciešami IN tipa parametri, tas ir, mēs piešķirsim datus un ievades mainīgos uzglabātajai procedūrai, lai veiktu darījumu, šajā gadījumā saglabājot tos datu bāzē.
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 ") VĒRTĪBAS (id, userid ), cena, komisija) END // DELIMITER;
PALIELINĀT
Tad mēs varam izpildīt saglabāto procedūru, izsaucot un piešķirot parametrus.
CALL "pa_newinmueble" ("12", "15", "10,00", "0,05")Mēs varam arī ievadīt datus, palaižot rutīnu no Phpmyadmin.
PALIELINĀT
Tālāk mēs izveidosim saglabāto procedūru īpašuma rediģēšanai no Phpmyadmin redaktora, šajā gadījumā mēs mainīsim tikai cenu.
Mēs varam izveidot lomas no definētāja lauka, kur mēs varam piešķirt Mysql serverī definētu lietotāju, šajā gadījumā vietējā saimniekdatora galveno lietotāju, lai tas varētu piekļūt saglabātajai procedūrai.
Ja mēs vēlamies to izdarīt no SQL koda, mums jāizpilda šādas komandas:
CREATE DEFINER = "root" @"localhost" PROCEDŪRA "pa_editarinmueble" (IN "new property" DECIMAL (10,2), IN "property id" INT (11)) SĀKT ATJAUNINĀT īpašumu SET price = new property WHERE id = property id ; BEIGASJūs to palaižat un esat pabeidzis.
Trigera vai aktivizētāju izmantošana Mysql
Aktivizētājs vai aktivizētājs MySQL ir SQL paziņojumu kopa, kas ir atkarīga no saglabātās procedūras un tiek izmantota, lai palaistu automātiski, kad mūsu datubāzē notiek kāds notikums. Šos notikumus izraisa tādi darījumi vai paziņojumi kā INSERT, UPDATE un DELETE.
Piemērs ir tad, kad izmaiņas tiek saglabātas reģistrā, mēs automātiski izveidojam dublējumu vai ierakstām revīzijas failu, lai uzzinātu, kādi dati tika mainīti, kad un kas tos mainīja. Tos var izmantot jebkādām manipulācijām, kas ietekmē datus, lai atbalstītu vai ģenerētu jaunu informāciju.
Mēs izveidosim zemāk esošo nekustamā īpašuma audita tabulu:
CREATE TABLE "audits" ("user" VARCHAR (200) NULL DEFAULT NULL, "description" TEXT NULL, "date" DATETIME NULL DEFAULT NULL) COLLATE = 'latin1_swedish_ci' ENGINE = InnoDBMēs izveidosim aktivizētāju, kas saglabās ziņojumu revīzijā, ja kāds mainīs īpašuma cenu.
CREATE DEFINER = "root" @"localhost" TRIGGER "real estate_after_update" PĒC UPDATE ON "nekustamais īpašums" KATRĀ RINDĀ IEVIETOJIET auditam (lietotājs, apraksts, datums) VĒRTĪBAS (lietotājs (), CONCAT ("Mainīta nekustamā īpašuma cena", NEW.id, '(', OLD.price, ') by (', NEW.price, ')'), NOW ())Šis aktivizētājs tiek izpildīts automātiski pēc cenu atjaunināšanas, ja mēs vēlamies, mēs varam iekļaut vairāk lauku; ar OLD mēs norādām lauku ar vērtību pirms izmaiņām un ar NEW mēs norādām jauno ievadīto vērtību, ar NOW () mēs norādām datumu un pašreizējais laiks.
Mēs izveidojam aktivizētāju, kuram kā notikums būs īpašumu pēc atjaunināšanas, tas ir, pēc rekvizītu tabulas atjaunināšanas; tādā gadījumā mēs pievienosim modifikāciju veikušo lietotāju, jauno cenu un iepriekšējo cenu.
Es veicu īpašuma atjaunināšanu:
CALL "pa_editarinmueble" ('80000', '170')Tad mēs ejam uz revīzijas tabulu un varam redzēt izmaiņas:
Rezultātus varam redzēt arī Phpmyadmin atskaites drukātā skatā. Mēs varam redzēt, kā ir saglabāti dati, kas identificē īpašumu, veiktās izmaiņas un lietotājs, kurš to veica, kā arī ir datums un laiks, kad izmaiņas tika veiktas.
Tālāk mēs redzēsim citu iespējamu lietojumu, ja īpašums tiek izīrēts, un tas automātiski maina tā statusu uz neaktīvu vai arī padarīsim to nepieejamu.
Šim nolūkam mums ir jābūt vienkāršai tabulai, kur uzglabāt, kurš īpašums tiek iznomāts, praktiskam piemēram, mēs neievērosim stingrus datus.
IZVEIDOT GALDA "īres" 'MOTORS = InnoDB;Tālāk mēs izveidosim saglabāto procedūru, lai nomas tabulā ievietotu jaunu ierakstu.
CREATE DEFINER = "root" @"localhost" PROCEDURE "pa_newrental" (IN "rekvizīta id" INT, IN "īrnieka ID" INT) VALODA SQL NAV NOTEIKTS SATURS SQL SQL DROŠĪBAS DEFINERA KOMENTĀRS "INSERT INTO" noma `,` nomnieka ID`) VALUES (nomnieka ID, īrnieka ID)
Un pēc tam aktivizēts aktivizētājs, lai mainītu rekvizītus:
CREATE DEFINER = "root" @"localhost" TRIGGER "rentals_after_insert" PĒC INSERT ON "īres" KATRU RĪDU ATJAUNINĀŠANAI aktivizēts nekustamais īpašums = "nē", kur id = JAUNUMS. PropertyidPēc tam mēs izsaucam saglabāto procedūru, kurā mēs piešķiram īpašuma ID un klienta vai īrnieka ID, kuru es nomāju.
Zvaniet jaunai nomai (170.11)Tālāk mēs ejam pie nekustamā īpašuma tabulas, un mums vajadzētu redzēt, ka aktivizētā lauka stāvokļa maiņa, ja tā ir aktīva, NAV tā ir aktīva.
Mēs esam redzējuši priekšrocības, ko sniedz sprūda izmantošana ar MySQL saglabātām procedūrām:
- Datu maiņas notikumu vai darbību audits un ierakstīšana tabulā.
- Mainiet lauka stāvokli, aktivizējot vai liedzot atļaujas un darbības tabulā
- Tas arī ļauj saglabāt datu konsekvenci, veicot darbības atbilstoši notikumiem, kas ietekmē vienu vai vairākas tabulas.