Krijimi i procedurave të ruajtura në phpmyadmin. Ruajtur se si të eksportohen dhe importohen procedurat e ruajtura nga phpmyadmin

Hiq DEFINER=root@localhost

në vend, gjatë importimit,

do të kompletohet.

A mund të më ndihmoni djema në lidhje me procedurat e ruajtura. Kur eksportoj procedurën e ruajtur nga phpmyadmin ajo renditet si

CREATE DEFINER = `root` @ `localhost` PROCEDURE `c4mo_get_cities_prc` (IN `p_state_code` VARCHAR (3), IN `p_country_code` VARCHAR (3), IN `p_language_code` VARCHAR (3) emri qyteti BEG IN_Q `c4mo_cities` WHERE aktivizuar = "Y" DHE kodi i_gjuhës = p_kodi_gjuhës DHE kodi_shtet= p_kodi_shteti DHE kodi_shteti= p_kodi_vendit; FUND

Dhe kur e importoj nga phpmyadmin, jep një gabim si

#1064 - Ju keni një gabim në sintaksën tuaj SQL; kontrolloni manualin që korrespondon me versionin e serverit tuaj MySQL për sintaksën e duhur për t'u përdorur pranë "" në rreshtin 13

Kjo është mjaft e thjeshtë nëse jeni duke përdorur ndërfaqen phpmyadmin.

Për eksport :

Do të shihni një skedë të rregullt sepse kjo skedë do të shfaqet vetëm nëse tashmë keni të paktën një procedurë të ruajtur.

Thjesht shkoni te skeda e rutinave dhe do të shihni procedurën tuaj të ruajtur (për db që keni bërë).

Kontrolloni kutinë më poshtë dhe më pas eksportojeni. Thjesht duhet të kopjoni të gjithë kodin dhe ta ruani atë kudo në kompjuterin tuaj lokal me skedarin your_stored_procedure.sql.

Për import:

Thjesht zgjidhni bazën e të dhënave dhe importoni procedurën e ruajtur skedarin your_stored_procedure.sql si më sipër siç importoni zakonisht skedarin .sql (tabelat) për db-në tuaj.

Nga autori: Pse po fle në punë! Jeni zgjuar dhe prisni që DBMS të ekzekutojë pyetjen? Pra, duhet të përshpejtohet. A keni përdorur procedura të ruajtura në MySQL? Nuk e di si? Epo, atëherë zgjohuni, sepse tani do të shqyrtojmë pikërisht këtë temë.

Çfarë procedurash të tjera ka?

Nëse keni një fobi për procedurat mjekësore, atëherë këto struktura "nuk janë tema e duhur". Kështu që nuk duhet të kesh frikë. Por seriozisht, procedurat e ruajtura janë një gjë e përshtatshme dhe e dobishme për "shëndetin" e një DBMS. Ata quhen gjithashtu "funksionet e ruajtura MySQL", por ky nuk është një përkufizim plotësisht i saktë. Edhe pse le të merremi me gjithçka në rregull.

Procedurat e ruajtura mund të optimizojnë ndjeshëm performancën e serverit dhe të rrisin shpejtësinë e tij, pasi kodi i tyre ruhet në cache RAM pas ekzekutimit të parë. Për të gjitha thirrjet e mëvonshme, procedura do të merret nga cache në vend që të dërgohet përsëri për ekzekutim.

Në MySQL, thirrja e një procedure të ruajtur do të thotë që pyetjet e shkruara në kodin e saj do të përpunohen vetëm në gjysmë të rrugës. Dhe vetëm nëse vlerat e parametrave të tyre ndryshohen. Por jo gjithçka është aq perfekte. Le të përshkruajmë së pari aspektet pozitive të përdorimit të procedurave:

Kapsulimi i funksionalitetit - i gjithë kodi ruhet në një vend, duke e bërë më të lehtë aksesin për aplikacionet e tjera. Në këtë mënyrë, procedurat e ruajtura janë të ngjashme me funksionet e programit.

Izolimi i aksesit të të dhënave - të gjithë përdoruesit nuk kanë qasje në rreshtat e tabelës, por vetëm në procedurat e ruajtura. E cila nga ana tjetër rrit nivelin e sigurisë së të gjitha të dhënave.

Rritja e shpejtësisë së serverit duke ruajtur memorien dhe bashkimin e kërkesave.

Në MySQL, procedurat e ruajtura, në teori, janë struktura që lidhen me "çështjet më të larta" - programimi DBMS. Kështu që ju dhe unë (si profesionistë) të paktën ngadalë, por... Por le të kthehemi te procedurat dhe të përshkruajmë aspektet negative të përdorimit të tyre:

Ngarkesa në serverin e bazës së të dhënave rritet - shumica e kodit të procedurës ekzekutohet në anën e serverit. Ky DBMS është ndërtuar mbi një model klient-server, i cili përfshin disa pajisje.

Manipulimi i të dhënave bëhet më i ndërlikuar - kur zhvilloni aplikacione, do t'ju duhet të shkruani një pjesë të kodit në anën e klientit.

Procesi i transferimit të bazave të të dhënave në binarët e tjerë (DBMS) po bëhet më i ndërlikuar.

Procedurat në phpMyAdmin

Së pari, le të shohim përdorimin e procedurave të ruajtura në MySQL duke përdorur phpMyAdmin si shembull. Në këtë mënyrë do të jetë më e lehtë për ne të kuptojmë këtë lloj strukture. Le të fillojmë!

Ne lëshojmë guaskën e softuerit, zgjedhim bazën e të dhënave të provës në të djathtë. Baza ime e të dhënave është bota. Pastaj në menunë kryesore në krye, shkoni te skeda "Procedurat". Këtu klikoni në "Shto procedurën".

Pas kësaj, do të shfaqet kutia e dialogut "Shto Procedurën". Plotësojmë të gjitha fushat e treguara në foto. Specifikoni emrin dhe llojin e procedurës. Në kolonën "Përkufizimi", shkruani llogarinë e përdoruesit dhe në komentet (opsionale) tregoni vetes se ky është vetëm një shembull i një procedure të ruajtur.

Tashmë në këtë fazë njihemi me veçoritë e sintaksës për krijimin e procedurave të ruajtura në MySQL. Në fushën “Përkufizimi” shkruajmë trupin e strukturës. Vini re se pyetja që po ekzekutohet është midis fjalëve kyçe BEGIN dhe END:

FILLO PËRZGJEDHJE "PËSHTËNDETJE, FJALË!"; FUND

FILLOJ

ZGJIDH "PËRSHËNDETJE, FJALË!" ;

Kjo kërkesë nuk kryen asnjë veprim me bazën e të dhënave, por shfaq vetëm një mbishkrim. Ne e treguam këtë në fushën "Qasja në të dhënat SQL".

Për të përfunduar krijimin e procedurës sonë të parë, klikoni "Ok" në fund. Pas kësaj, programi shfaq një mesazh "të gjelbër" që tregon se kërkesa u krye me sukses. Kodi i tij është paraqitur më poshtë. Në MySQL, procedurat dhe funksionet e ruajtura krijohen duke përdorur komandën speciale CREATE PROCEDURE. Por më shumë për këtë më vonë.

Tani le të ekzekutojmë strukturën e krijuar për ekzekutim. Për ta bërë këtë, në seksionin "Procedurat", klikoni lidhjen "Run". Por sa turp është ky! Ku shkoi "e gjelbërta" jonë e preferuar? Pse programi "betohet" dhe "bërtit" se nuk ka memorie të mjaftueshme të ndarë?

Ku po shikonte autori i këtij publikimi...! Na vjen keq, pak i hutuar. Në fund të fundit, autori jam unë. Qetësohu, ne do të rregullojmë gjithçka tani! Ky gabim ndodh sepse vlera e parametrit thread_stack në skedarin kryesor të konfigurimit është lënë i pandryshuar. Si parazgjedhje, 128 Kb ndahen për çdo transmetim. Kufiri i caktuar i RAM-it është mjaft i mjaftueshëm për të kryer pyetje të thjeshta, por jo i mjaftueshëm për procedurat.

Kjo dëshmon edhe një herë se më shumë burime janë shpenzuar për ekzekutimin e nxitësve dhe procedurave të ruajtura në MySQL.

Shkoni te skedari i konfigurimit my.ini dhe rrisni kufirin e RAM-it të vendosur për çdo thread në 256 kb. Tani ekzekutoni përsëri procedurën e krijuar. Këtë herë gjithçka shkoi siç pritej dhe programi e ktheu rezultatin pa gabim.

Ju lutemi vini re se thirrja bëhet duke përdorur komandën CALL, duke treguar emrin e procedurës dhe parametrat e pranuar (në kllapa).

Shembull më kompleks

Por megjithatë, aftësitë e phpMyAdmin janë më të përshtatshme për krijimin e shpejtë të procedurave. Dhe për të zhvilluar një procedurë të ruajtur në MySQL me një numër dinamik argumentesh (për shembull), do t'ju duhet softuer më i përshtatshëm. Pse:

phpMyAdmin nuk dëshiron të "kuptojë" siç duhet procedurat që nuk janë krijuar përmes një konstruktori të veçantë.

Programi nuk ekzekuton strukturat e nisura nën rrënjë dhe një fjalëkalim bosh, dhe në Denver krijimi i një përdoruesi të ri dhe hyrja në phpMyAdmin nën të është një problem real.

Nëse ndiqni me kujdes publikimet e mia dhe përmbushni të gjitha "dëshirat" e deklaruara në to, atëherë duhet të keni të instaluar tashmë MySQL Administrator. Në lidhje me të, ju vetëm duhet të shkarkoni MySQL Query Browser nga kjo lidhje. Është më mirë të përdorni këto dy programe së bashku: krijoni procedura në të parën dhe testoni ato në tjetrën. Shko:

Në krye të majtë, kaloni në skedën "Katalog".

Zgjidhni bazën e të dhënave të dëshiruar dhe në menynë e sipërme klikoni në "Procedurat e ruajtura" dhe në fund në "Krijo Procën e ruajtur të ruajtur"

Në dritaren e redaktorit që shfaqet, futni kodin e procedurës dhe klikoni "Ekzekutoni SQL".

CREATE DEFINER=`roman`@`localhost` PROCEDURA `proc5`() BEGIN deklaroj një int; set a="SELECT COUNT(*) FROM city as a"; if(a > 1000) THEN SELECT "<1000"; ELSE SELECT ">1000"; FUND NËSE; FUND

CREATE DEFINER = ` roman ` @ ` localhost ` PROCEDURE ` proc5 ` ()

FILLOJ

deklaroni një int;

vendos një = "ZGJIDH COUNT(*) NGA qyteti si";

nëse (a > 1000 ) ATËHERË

ZGJIDH "<1000" ;

TJETER

ZGJIDH ">1000" ;

FUND NËSE ;

Ju mund të keni vënë re se ne nuk po kalojmë asnjë vlerë brenda procedurës. Për më tepër, MySQL mund të ketë një numër të panjohur parametrash në një procedurë të ruajtur, të cilat më pas mund të kalohen përmes deklaratave të reja të variablave të vendosura brenda sytheve.

Për të filluar procedurën, shkoni te MySQL Query Browser. Fillimisht, futni llogarinë dhe fjalëkalimin tuaj dhe më pas në të majtë në "Object Explorer" gjejmë dosjen me bazën e të dhënave të kërkuar. Pjesa tjetër e sekuencës së veprimeve tregohet në foton tjetër.

Kryerja e një procedure në PHP

Tani le të shohim se si quhet një procedurë e ruajtur MySQL në PHP. Për ta bërë këtë, do të duhet të "rivizatojmë" pak kodin e shembullit tonë të mëparshëm. Ne do të shtojmë një parametër të daljes në procedurë dhe gjithashtu do të ndryshojmë kodin e kërkesës:

CREATE DEFINER=`root`@`localhost` PROCEDURE `proc6`(nga kolona dhjetore) BEGIN SELECT COUNT(*) into col FROM city; FUND

CREATE DEFINER = ` root ` @ ` localhost ` PROCEDURE ` proc6 ` (nga dhjetore )

FILLOJ

SELECT COUNT (*) në ​​col FROM city;

Për të thirrur një procedurë nga një skedar PHP dhe për të nxjerrë rezultatin, ne do të përdorim aftësitë e klasës PDOstatement, të krijuara posaçërisht për të punuar me bazën e të dhënave përmes SQL

Kjo klasë është implementuar relativisht kohët e fundit dhe është mbështetur nga PHP që nga versioni 5.1.0. Përpara përdorimit, ju këshilloj të kontrolloni versionin e gjuhës që po përdorni duke përdorur funksionin e integruar phpversion().

E thënë thjesht, procedurat e ruajtura (“SP”) janë procedura të ruajtura në një bazë të dhënash (të shkruara duke përdorur SQL dhe deklarata të tjera kontrolli) që mund të ekzekutohen nga një motor i bazës së të dhënave dhe të thirren nga kodi i programit që funksionon me atë motor. """ Lexo plotësisht

Procedurat e ruajtura në MySQL dhe PHP. Pjesa 2

Taylor Wren (Taylor Ren), 03.01.2014

Krijimi i një procedure të ruajtur në MySQL

Meqenëse HP-të ruhen në server, rekomandohet krijimi i tyre direkt në server, d.m.th. Ju nuk duhet të përdorni PHP ose gjuhë të tjera programimi për të ekzekutuar komandat SQL për të krijuar procedura të ruajtura.

Le të shohim se si të krijojmë një HP në një server MySQL, si të krijojmë një përdorues për të dhe si t'i caktojmë atij privilegje për të drejtuar HP-në tonë. Pastaj do të kontrollojmë korrektësinë e rezultatit. Për këtë unë do të përdor MySQL Workbench. Ju gjithashtu mund të përdorni programe të tjera (për shembull, PHPMyAdmin). Ju mund të zgjidhni paketën e veglave që ju përshtatet më së miri.

Le të themi se tabela jonë duket si kjo:

KRIJO TABELA `paga` (`empid` int(11) NOT NULL, `sal` int(11) DEFAULT NULL, ÇELËSI KRYESOR (`empid`)) ENGINE=InnoDB KARKESË E DEFAULTUR=utf8;

Për punonjësin tonë që ka nevojë për informacion statistikor mbi pagat (mesatare, maksimale, minimale, etj.) nga kjo tabelë, ne do të krijojmë një përdorues "tr" si më poshtë:

KRIJO PERDORUES "tr"@"localhost" I IDENTIFIKUAR NGA "mypass";

Tani le t'i caktojmë këtij përdoruesi të vetmin privilegj EXECUTE në skemën ku ndodhet tabela e pagave:

Granto ekzekutimin në hris.* në tr@`%`

Ne mund të verifikojmë që kemi caktuar privilegjin e saktë duke hapur "Përdoruesit dhe privilegjet" në MySQL Bench:

Tani le të krijojmë vetë HP-në si më poshtë:

DELIMITER $$ KRIJO PROCEDURE `avg_sal` (nga mesatarja dhjetore) FILLO zgjidhni mesataren (sal) në mesatare nga paga; FUND

Pas ekzekutimit të kësaj komande në MySQL Workbench, do të krijohet një avg_sal HP gati për t'u përdorur. E kthen pagën mesatare nga tabela e pagave.

Për të kontrolluar nëse përdoruesi tr mund të ekzekutojë vërtet HP dhe nuk ka akses në tabelën e pagave, duhet të rilidhemi me serverin MySQL, duke u identifikuar si tr. Në MySQL Workbench, kjo mund të bëhet duke krijuar një lidhje tjetër dhe duke specifikuar përdoruesin e dëshiruar dhe fjalëkalimin e tij.

Pas lidhjes nga nën tr, gjëja e parë që vërejmë është se përdoruesi nuk sheh fare tabela, ai sheh vetëm HP:

Natyrisht, përdoruesi tr nuk mund të hyjë në asnjë nga tabelat (dhe për këtë arsye nuk mund të shohë informacion të detajuar rreth pagave nga tabela e pagave), por ai mund të drejtojë HP-në që kemi krijuar, e cila do t'i kthejë atij pagën mesatare për kompaninë:

Thirrni avg_sal(@out); zgjidhni @out;

Do të shfaqet paga mesatare.

Pra, ne kemi bërë të gjithë punën përgatitore: kemi krijuar një përdorues, i kemi caktuar privilegje, kemi krijuar një HP dhe e kemi testuar atë. Tani le të shohim se si ta quajmë këtë HP nga PHP.

Thirrja e një procedure të ruajtur nga PHP

Kur përdorni PDO, thirrja e HP-së është mjaft e thjeshtë. Këtu është kodi përkatës PHP:

$dbms = "mysql"; // Zëvendësoni parametrat e mëposhtëm të lidhjes me ato të përshtatshme për mjedisin tuaj: $host = "192.168.1.8"; $db = "hris"; $user = "tr"; $pass = "mypass"; $dsn = "$dbms:host=$host;dbname=$db"; $cn=PDO e re ($dsn, $user, $pass); $q=$cn->exec("thirrni avg_sal(@jashtë)"); $res=$cn->query("select @out")->fetchAll(); print_r($res);

Variabli $res përmban pagën mesatare nga tabela e pagave. Tani përdoruesi mund të kryejë përpunim të mëtejshëm të daljes duke përdorur PHP.

konkluzionet

Në këtë artikull, ne shikuam një komponent të harruar prej kohësh të bazave të të dhënave MySQL: procedurat e ruajtura. Përfitimet e përdorimit të HP janë të dukshme, por më lejoni t'ju kujtoj: Procedurat e ruajtura na lejojnë të aplikojmë kontroll më të rreptë të aksesit në të dhëna të caktuara kur logjika e biznesit e kërkon atë.

Përveç kësaj, ne demonstruam hapat bazë në krijimin e procedurave të ruajtura, përdoruesve dhe caktimin e privilegjeve të duhura dhe treguam se si thirret HP nga PHP.

Ky artikull nuk mbulon të gjithë temën e procedurave të ruajtura. Disa aspekte të rëndësishme si parametrat I/O, deklaratat e kontrollit, kursorët, sintaksa e plotë etj. nuk u trajtuan në këtë artikull të shkurtër.

Nëse jeni të interesuar, ju lutemi lini një koment këtu. Nëse është e nevojshme, ne do të jemi të lumtur të ofrojmë artikuj më të thelluar mbi aspektin e dobishëm dhe të fuqishëm të procedurave të ruajtura të MySQL.

Taylor Wren

Taylor është një zhvillues i pavarur i aplikacioneve në internet dhe desktop me bazë në Suzhou në Kinën lindore. Filloi me mjetet e zhvillimit Borland (C++Builder, Delphi), botoi një libër në InterBase. Që nga viti 2003 ai është ekspert i certifikuar i Borland. Pastaj kalova në zhvillimin e uebit në një konfigurim tipik LAMP. Më vonë fillova të punoj me jQuery, Symfony, Bootstrap, Dart etj.

Publikimet e mëparshme:

Ne vazhdojmë të punojmë me bazën e të dhënave mytest të krijuar në atë të mëparshme. Sot ne do t'i shtojmë aplikacionit tonë aftësinë për t'iu përgjigjur komentit të një përdoruesi dhe gjithashtu do të mësojmë se si të krijojmë procedurat e ruajtura dhe funksionet.

Krijimi i një procedure të ruajtur

Hap phpmyadmin. Zgjidhni bazën e të dhënave mytest dhe klikoni në titullin e saj ose ikonën Browse. Më pas shkoni te skeda Rutinat dhe krijoni një procedurë të re duke klikuar mbi Shto rutinë.

Do të shfaqet një formular që duhet të plotësoni.

Emri i rutinës (emri i procedurës/funksionit) ReplyToComment.

Lloji (lloji) - procedurë. Dallimi midis një procedure dhe një funksioni është se një funksion gjithmonë kthen një vlerë dhe përmban një deklaratë kthimi.

Parametrat (parametrat) Procedura jonë do të marrë dy parametra: tekstin e përgjigjes dhe ID-në e komentit të cilit po i përgjigjemi. Të dy parametrat do të kalojnë nga aplikacioni ynë i klientit.

Krijimi i parametrave të procedurës

Le të krijojmë parametrin e parë

Drejtimi tregoni drejtimin e parametrit (IN, OUT, INOUT). Në procedurën tonë, të dy parametrat e kaluar do të jenë hyrëse (IN).

Emri (emri i parametrit) përmbajtja.

Shkruani INT, VARCHAR, DATETIME dhe kështu me radhë. Parametri Content përmban tekstin e përgjigjes, i cili do të ruhet në kolonën comment_content. Kjo kolonë ka një lloj specifik, për ta përcaktuar atë, hapni tabelën wp_comments dhe shkoni te skeda Struktura, gjeni emrin e kolonës që na nevojitet dhe shikoni llojin e saj në kolonën Type. Në këtë shembull, kolona ka një lloj teksti, i njëjti lloj duhet të specifikohet për parametrin tonë.

Gjatësia/Vlerat (gjatësia ose vlera) për llojin e tekstit kjo fushë nuk mund të vendoset, por zakonisht gjatësia tregohet këtu, për shembull VARCHAR(20), INT(10) ose ndonjë vlerë e paracaktuar.

Opsionet si opsione shtesë, mund të specifikoni kodimin aktual të kolonës; ai gjithashtu mund të shikohet në skedën Struktura, kolona e Përmbledhjes. Le të vendosim vlerën në utf8.

rezultat

Le të shtojmë një parametër të dytë duke klikuar në butonin Shto parametrin.

Drejtimi - IN Emri - Lloji ComID - Gjatësia/Vlerat BIGINT - 20 Opsione - E PASINJORZUAR

Të dy parametrat janë krijuar, ne vazhdojmë të plotësojmë formularin.

Përkufizimi këtu ne përshkruajmë trupin e procedurës. Trupi është një bllok që fillon me fjalën kyçe BEGIN dhe përfundon me fjalën kyçe FUND. Brenda trupit të procedurës, mund të vendosni tekstin e pyetjes, të deklaroni variabla, të përdorni konstruksione degëzimi, sythe dhe shumë më tepër, ashtu si në çdo gjuhë programimi.

organi i procedurës

Së pari, le të krijojmë një bllok për fillimin dhe fundin e trupit të procedurës sonë.

FILLIMI FUND;

Tani le të shtojmë një tekst të pyetjes që do të plotësojë fushat në tabelën e komenteve wp kur shtoni një koment të ri (përgjigje).

FILLO INSERT NE wp_comments (komenti_autori, komenti_autori_email, komenti_përmbajtja, data_komenti, data_komenti_gmt, komenti_post_id, komenti_prindi, komenti_miratuar, user_id) VLERAT; FUND;

Ne do t'i ruajmë vlerat e zëvendësuara në variabla. Për të krijuar një variabël, përdorni fjalën kyçe DECLARE, më pas specifikoni emrin, llojin dhe gjatësinë e ndryshores dhe gjithashtu mund të specifikoni vlerën e paracaktuar. Nëse një variabël ka një parametër DEFAULT, atëherë ndryshorja inicializohet.

DEKLAROJ llojin e emrit (gjatësinë) Vlera e paracaktuar DEFAULT;

Ju gjithashtu mund të vendosni një vlerë për çdo variabël duke përdorur operatorin SET.

Emri i ndryshores SET = vlera;

Dhe kështu ne do të krijojmë tre variabla: Autor, Email, UsedID, të cilat do të ruajnë vlerat për kolonat: koment_autori, koment_autori_email, user_id.

FILLO DEKLAROJE Autori tinytext DEFAULT "admin"; DEKLARONI ID-në e përdoruesit bigint(20) DEFAULT 1; -- Deklaroi variablin Email DECLARE Email varchar(100); -- Cakto vlerën e ndryshores Email SET Email = " [email i mbrojtur]"; FUND;

koment_përmbajtja Kjo kolonë ruan tekstin e komentit, i cili kalon në procedurë si parametri i hyrjes së përmbajtjes. Ne nuk do të krijojmë një variabël të veçantë, por thjesht do të zëvendësojmë vlerën e parametrit të hyrjes në VALUES.

koment_data Dhe koment_data_gmt të dyja kolonat do të kenë të njëjtat vlera kur të mbushen për herë të parë. Le të krijojmë një variabël Date dhe t'i caktojmë si vlerë rezultatin që do të kthejë funksioni i integruar TANI. Ky funksion kthen datën dhe orën aktuale në formatin DATETIME.

DEKLAROJE DATËN E KURNDËS SË TË PARASHKRUAR TANI ();

DEKLAROJ datën time DATA TIME; SET MyCurDate = TANI();

koment_miratuar A miratohet komenti, 1 (po) ndryshe 0. Le të krijojmë variablin Aprovuar, por përpara se të vendosim vlerën do të bëjmë pak kontroll.

DEKLAROJ Varchar(20); NËSE Autori = "admin" PASTAJ SET Aprovuar = 1; SET TJETËR Miratuar = 0; ENDIF;

koment_prindi këtu duhet të specifikoni ID-në e komentit të cilit po i përgjigjemi si vlerë. ID i kalohet procedurës si parametër i dytë hyrës. Le të krijojmë një variabël ParentCom dhe t'i caktojmë vlerën e parametrit të kaluar.

DEKLAROJ ParentCom varchar(20); SET ParentCom = ComID ;

Parametri i fundit ka mbetur koment_post_id Këtu duhet të tregoni ID-në e postimit në të cilin do të postohet komenti ynë. Le të deklarojmë një variabël të quajtur PostID.

DEKLARONI PostID BIGINT(20);

në këtë pikë trupi i procedurës duhet të duket kështu

FILLO -- blloku i deklarimit të ndryshoreve DEKLAROJE Autori tinytext DEFAULT "admin"; DEKLARONI ID-në e përdoruesit bigint(20) DEFAULT 1; DEKLAROJE Email varchar(100); DEKLAROJE datën DATETIME DEFAULT TANI(); DEKLAROJ ParentCom varchar(20); DEKLAROJ Varchar(20); DEKLARONI PostID BIGINT(20); -- Vendosja e vlerave të variablave NËSE Autori = "admin" PASTAJ SET Aprovuar = 1; SET TJETËR Miratuar = 0; ENDIF; SET Email = " [email i mbrojtur]"; SET ParentCom = ComID ; -- kërkoni INSERT INTO wp_comments (comment_autor, comment_author_email, comment_content, comment_data, comment_date_gmt, comment_post_id, comment_parent, comment_approved, user_id) VALUES (Author/Komenti/Aplikuar, D-Email, Parent, D-Email, Date, Komenti i postuar, Date, Date, Email) ID e përdoruesit); FUND;

MySQL 5 ka shumë veçori të reja, një nga më të rëndësishmet prej të cilave është krijimi i procedurave të ruajtura. Në këtë tutorial, unë do të flas se cilat janë ato dhe si mund ta bëjnë jetën tuaj më të lehtë.

Prezantimi

Një procedurë e ruajtur është një mënyrë për të përmbledhur veprimet e përsëritura. Procedurat e ruajtura mund të deklarojnë variabla, të manipulojnë rrjedhën e të dhënave dhe të përdorin teknika të tjera programimi.

Arsyeja e krijimit të tyre është e qartë dhe konfirmohet nga përdorimi i shpeshtë. Nga ana tjetër, nëse flisni me ata që punojnë me ta në mënyrë të parregullt, mendimet do të ndahen në dy krahë krejtësisht të kundërt. Mos harroni këtë.

Mbrapa

  • Ndarja e logjikës me aplikacione të tjera. Procedurat e ruajtura përmbledhin funksionalitetin; kjo siguron lidhje për aksesin dhe menaxhimin e të dhënave nëpër aplikacione të ndryshme.
  • Izolimi i përdoruesve nga tabelat e bazës së të dhënave. Kjo ju lejon të jepni akses në procedurat e ruajtura, por jo në vetë të dhënat e tabelës.
  • Ofron një mekanizëm mbrojtës. Sipas pikës së mëparshme, nëse mund t'i qaseni të dhënave vetëm përmes procedurave të ruajtura, askush tjetër nuk mund t'i fshijë të dhënat tuaja përmes komandës SQL DELETE.
  • Përmirësimi i ekzekutimit si rezultat i trafikut të reduktuar të rrjetit. Duke përdorur procedurat e ruajtura, mund të kombinohen pyetje të shumta.

Kundër

  • Rritja e ngarkesës në serverin e bazës së të dhënave për faktin se pjesa më e madhe e punës kryhet në anën e serverit, dhe më pak në anën e klientit.
  • Do t'ju duhet të mësoni shumë. Ju do të duhet të mësoni sintaksën e shprehjes MySQL për të shkruar procedurat tuaja të ruajtura.
  • Ju po dyfishoni logjikën e aplikacionit tuaj në dy vende: kodin e serverit dhe kodin për procedurat e ruajtura, duke e komplikuar kështu procesin e manipulimit të të dhënave.
  • Migrimi nga një DBMS në tjetrin (DB2, SQL Server, etj.) mund të çojë në probleme.

Mjeti me të cilin punoj quhet MySQL Query Browser, i cili është mjaft standard për ndërveprim me bazat e të dhënave. Mjeti i linjës së komandës MySQL është një tjetër zgjedhje e shkëlqyer. Arsyeja që po ju them këtë është sepse phpMyAdmin i preferuar i të gjithëve nuk mbështet ekzekutimin e procedurave të ruajtura.

Nga rruga, unë jam duke përdorur një strukturë bazë të tabelës për ta bërë më të lehtë për ju të kuptoni këtë temë. Unë po flas për procedurat e ruajtura, dhe ato janë mjaft komplekse për të kërkuar thellimin në strukturën e rëndë të tabelës.

Hapi 1: Vendosni një kufizues

Një ndarës është një karakter ose varg karakteresh që përdoret për t'i treguar klientit MySQL që keni përfunduar së shkruari shprehjen SQL. Për shekuj me radhë, pikëpresja ka qenë kufizues. Megjithatë, mund të lindin probleme sepse mund të ketë shprehje të shumta në një procedurë të ruajtur, secila prej të cilave duhet të përfundojë me një pikëpresje. Në këtë tutorial përdor vargun "//" si kufitar.

Hapi 2: Si të punoni me procedurat e ruajtura

Krijimi i një procedure të ruajtur

KUFIZUES // KRIJO PROCEDURË `p2` () GJUHË SQL DETERMINISTIC SQL PËRCAKTOR I SIGURISË KOMENT "Një procedurë" FILLO ZGJIDH "Përshëndetje Botë!"; FUND//

Pjesa e parë e kodit krijon një procedurë të ruajtur. Tjetri përmban parametra opsionalë. Pastaj vjen emri dhe, së fundi, trupi i vetë procedurës.

Emrat e procedurave të ruajtura janë të ndjeshme ndaj shkronjave të vogla. Ju gjithashtu nuk mund të krijoni procedura të shumta me të njëjtin emër. Nuk mund të ketë shprehje brenda një procedure të ruajtur që modifikojnë vetë bazën e të dhënave.

4 karakteristikat e një procedure të ruajtur:

  • Gjuha: Për qëllime transportueshmërie, parazgjedhja është SQL.
  • Deterministik: nëse procedura kthen gjithmonë të njëjtin rezultat dhe merr të njëjtat parametra hyrës. Kjo është për procesin e përsëritjes dhe regjistrimit. Vlera e paracaktuar NUK është DETERMINISTIKE.
  • SQL Security: të drejtat e përdoruesit kontrollohen gjatë telefonatës. INVOKER është përdoruesi që thërret procedurën e ruajtur. DEFINER është “krijuesi” i procedurës. Vlera e paracaktuar është DEFINER.
  • Koment: Për qëllime dokumentacioni, vlera e paracaktuar është ""

Thirrja e një procedure të ruajtur

Për të thirrur një procedurë të ruajtur, duhet të shkruani fjalën kyçe CALL, e ndjekur nga emri i procedurës, e ndjekur nga parametrat (variablat ose vlerat) në kllapa. Kërkohen kllapa.

Thirrje e ruajtur_procedurës_emri (param1, param2, ....) Procedura e Thirrjes1(10 , "parametri i vargut" , @parameter_var);

Modifikimi i një procedure të ruajtur

MySQL ka një deklaratë ALTER PROCEDURE për ndryshimin e procedurave, por është e përshtatshme vetëm për ndryshimin e disa karakteristikave. Nëse keni nevojë të ndryshoni parametrat ose trupin e një procedure, duhet ta fshini dhe rikrijoni atë.

Heqja e një procedure të ruajtur

PROCEDURA E HEQJES NËSE EKZISTON p2;

Kjo është një komandë e thjeshtë. Deklarata IF EXISTS kap një gabim nëse një procedurë e tillë nuk ekziston.

Hapi 3: Opsionet

Le të shohim se si mund t'i kalojmë parametrat në një procedurë të ruajtur.

  • CREATE PROCEDURE proc1(): lista e parametrave bosh
  • CREATE PROCEDURE proc1 (Në varname DATA-TYPE): një parametër hyrës. Fjala IN është opsionale sepse parametrat e paracaktuar janë IN (in).
  • KRIJO PROCEDURËN proc1 (JASHTË emrit të varrit TË DHËNA-TYPE): u kthye një parametër.
  • CREATE PROCEDURE proc1 (INOUT varname DATA-TYPE): një parametër, si hyrje ashtu edhe kthim.

Natyrisht, ju mund të specifikoni disa parametra të llojeve të ndryshme.

Shembull i parametrit IN

DELIMITER // KRIJO PROCEDURE `proc_IN` (IN var1 INT) FILLO ZGJIDH var1 + 2 SI rezultat; FUND//

Shembull parametri OUT

DELIMITER // KRIJO PROCEDURE `proc_OUT` (OUT var1 VARCHAR(100)) BEGIN SET var1 = "Ky është një test"; FUND //

Shembull i parametrit INOUT

KUFIZUES // KRIJO PROCEDURE `proc_INOUT` (OUT var1 INT) FILLIMI SET var1 = var1 * 2; FUND //

Hapi 4: Variablat

Tani do t'ju mësoj se si të krijoni variabla dhe t'i ruani ato brenda procedurave. Ju duhet t'i deklaroni ato në mënyrë eksplicite në fillim të bllokut BEGIN/END, së bashku me llojet e tyre të të dhënave. Pasi të keni deklaruar një variabël, mund ta përdorni atë në të njëjtën mënyrë si variablat e sesioneve, literalet ose emrat e kolonave.

Sintaksa e deklarimit të ndryshores duket si kjo:

DEKLARONI vlerën e paracaktuar të emrit të vargut DATA-TYPE DEFAULT;

Le të deklarojmë disa variabla:

DEKLARONI a, b NË PARALAKTUAR 5; DECLARE rr VARCHAR(50); DEKLAROJ sot TIMESTAMP DEFAULT CURRENT_DATE; DEKLAROJ v1, v2, v3 TINYINT;

Puna me variablat

Pasi të keni deklaruar një ndryshore, mund të vendosni vlerën e saj duke përdorur komandat SET ose SELECT:

DELIMITER // KRIJO PROCEDURE `var_proc` (NE paramstr VARCHAR(20)) FILLO DEKLAROJE a, b INT DEFAULT 5; DECLARE rr VARCHAR(50); DEKLAROJ sot TIMESTAMP DEFAULT CURRENT_DATE; DEKLAROJ v1, v2, v3 TINYINT; VLERA NË TABELËN 1 (a); SET str = "Unë jam një varg"; SELECT CONCAT(str,paramstr), sot NGA tabela2 WHERE b >=5; FUND //

Hapi 5: Strukturat e kontrollit të fijeve

MySQL mbështet konstruktet IF, CASE, ITERATE, LEAVE LOOP, WHILE dhe REPEAT për të kontrolluar thread-et brenda një procedure të ruajtur. Ne do të shohim se si të përdorim IF, CASE dhe WHILE pasi ato janë më të përdorurat.

IF dizajni

Duke përdorur konstruktin IF, ne mund të kryejmë detyra që përmbajnë kushte:

DELIMITER // CREATE PROCEDURE `proc_IF` (IN param1 INT) BEGIN DECLARE variable1 INT; Ndryshorja SET1 = param1 + 1; NËSE variabli1 = 0 THËNË ZGJEDH variablin1; ENDIF; NËSE param1 = 0 ATHESH ZGJEDH "Vlera e parametrit = 0"; ELSE SELECT "Vlera e parametrit<>0"; FUND NËSE; FUND //

Dizajn CASE

CASE është një metodë tjetër e testimit të kushteve dhe zgjedhjes së një zgjidhjeje të përshtatshme. Kjo është një mënyrë e shkëlqyer për të zëvendësuar shumë konstruksione IF. Konstrukti mund të përshkruhet në dy mënyra, duke siguruar fleksibilitet në menaxhimin e shprehjeve të shumta të kushtëzuara.

KUFIZUES // CREATE PROCEDURE `proc_CASE` (IN param1 INT) FILLO DEKLARO variabli1 INT; Ndryshorja SET1 = param1 + 1; Ndryshorja CASE1 WHEN 0 THE INSERT NE tabelen1 VLERAT (param1); WWEN 1 THEND INSERT NË TABELËN 1 VLERAT (ndryshore 1); TË TJETËR INSERT NË TABELËN 1 VLERAT (99); RASTI FUNDIT; FUND //

KUFIZUES // CREATE PROCEDURE `proc_CASE` (IN param1 INT) FILLO DEKLARO variabli1 INT; Ndryshorja SET1 = param1 + 1; RASTI KUR variabli 1 = 0 PASTAJ INSERT NE tabelen1 VLERAT (param1); KUR variabli 1 = 1 ATHE SHTU INSERT NE tabelen1 VLERAT (variabli 1); TË TJETËR INSERT NË TABELËN 1 VLERAT (99); RASTI FUNDIT; FUND //

NDERSA dizajn

Teknikisht, ekzistojnë tre lloje sythe: cikli WHILE, cikli LOOP dhe cikli REPEAT. Ju gjithashtu mund të qarkulloni duke përdorur teknikën e programimit Darth Vader: deklaratat GOTO. Këtu është një lak shembull:

DELIMITER // CREATE PROCEDURE `proc_WHILE` (NE param1 INT) BEGIN DECLARE variable1, variable2 INT; Ndryshorja SET1 = 0; WHILE variabli1< param1 DO INSERT INTO table1 VALUES (param1); SELECT COUNT(*) INTO variable2 FROM table1; SET variable1 = variable1 + 1; END WHILE; END //

Hapi 6: Kursorët

Kursorët përdoren për të përshkuar grupin e rreshtave të kthyer nga një pyetje dhe për të përpunuar çdo rresht.

MySQL mbështet kursorët në procedurat e ruajtura. Këtu është një sintaksë e shkurtër për krijimin dhe përdorimin e një kursori.

DEKLAROJE emrin e kursorit KURSORIN PËR ZGJEDHJE ...; /*Deklarimi i kursorit dhe plotësimi i tij */ DEKLARONI VAZHDIM TRAJTUESI PER NUK FUND /*Çfarë duhet bërë kur nuk ka më regjistrime*/ HAPI emri i kursorit; /*Hap kursorin*/ FETCH emri i kursorit INTO variabli [, variabla]; /*Cakto një vlerë për një variabël të barabartë me vlerën aktuale të kolonës*/ CLOSE cursor-name; /*Mbyll kursorin*/

Në këtë shembull do të kryejmë disa operacione të thjeshta duke përdorur një kursor:

KUFIZUES // KRIJO PROCEDURE `proc_CURSOR` (OUT param1 INT) FILLO DEKLARONI a, b, c INT; DEKLAROJE KURSORIN PER ZGJEDHJE col1 NGA tabela1; DEKLARONI VAZHDIM TRAJTUESI PËR SETIN NUK GJETUR b = 1; HAPUR cur1; SET b = 0; SET c = 0; NDËRSA b = 0 SHKONI kur1 NE a; NËSE b = 0 ATEHERE SET C = c + a; ENDIF; FUND DERI; MBYLL cur1; SET param1 = c; FUND //

Kursorët kanë tre veti që duhet t'i kuptoni për të shmangur marrjen e rezultateve të papritura:

  • Jo i ndjeshëm: kursori që hapet një herë nuk do të pasqyrojë ndryshimet në tabelë që ndodhin më vonë. Në realitet, MySQL nuk garanton që kursori do të përditësohet, prandaj mos u mbështetni në të.
  • Vetëm për lexim: Kursorët nuk mund të modifikohen.
  • Nuk ka kthim prapa: kursori mund të lëvizë vetëm në një drejtim - përpara, nuk do të mund të kaloni rreshta pa i zgjedhur ato.

konkluzioni

Në këtë tutorial, ju njoha me bazat e punës me procedurat e ruajtura dhe disa nga vetitë specifike që lidhen me të. Sigurisht, do t'ju duhet të thelloni njohuritë tuaja në fusha të tilla si siguria, shprehjet SQL dhe optimizimi përpara se të bëheni një mësues i vërtetë i procedurës MySQL.

Ju duhet të llogaritni përfitimet e përdorimit të procedurave të ruajtura në aplikacionin tuaj specifik dhe më pas të krijoni vetëm procedurat e nevojshme. Në përgjithësi, unë përdor procedura; Sipas mendimit tim, ato ia vlen të zbatohen në projekte për shkak të sigurisë së tyre, mirëmbajtjes së kodit dhe dizajnit të përgjithshëm. Gjithashtu, mbani në mend se procedurat MySQL janë ende një punë në progres. Prisni përmirësime në lidhje me funksionalitetin dhe përmirësimet. Ju lutem mos ngurroni të ndani mendimet tuaja.