1. MySQL muutujate ülevaade
Muutujate roll ja mugavus MySQL-is
MySQL muutujad on kasulik tööriist väärtuste hoidmiseks päringu sees ja nende korduvkasutamiseks mitmes päringus. See välistab vajaduse sama andmete korduvalt toomiseks ning muudab SQL-laused lihtsamaks ja tõhusamaks.
MySQL-is on peamiselt kahte tüüpi muutujaid:
- Kasutaja määratud muutujad: ajutised muutujad, mida kasutatakse konkreetse seansi sees.
- Süsteemimuutujad: MySQL-serveri töö reguleerimiseks mõeldud seadistusmuutujad.
Selles jaotises vaatleme esmalt kasutaja määratud muutujaid ja seejärel selgitame süsteemimuutujate kasutamist.
2. MySQL muutujate tüübid
2.1 Kasutaja määratud muutujad
Kasutaja määratud muutujad kehtivad ainult seansi ulatuses ja neid ei saa teised kliendid kasutada. See tagab, et sama seansi sees saab muutujaid turvaliselt taaskasutada. Muutujaid deklareeritakse @
märgiga.
Näide:
SET @user_id = 123;
SELECT @user_id;
Selle abil saab SET
-käsuga määrata muutuja ja kasutada seda väärtust järgmistes päringutes. Samuti on võimalik kasutada SELECT INTO
, et salvestada päringu tulemus muutujasse.
SELECT name INTO @user_name FROM users WHERE id = @user_id;
2.2 Süsteemimuutujad
Süsteemimuutujaid kasutatakse MySQL-serveri seadete muutmiseks. Näiteks saab hallata maksimaalset ühenduste arvu või ajalõpu seadeid.
Näide:
SHOW VARIABLES LIKE 'max_connections';
See päring kuvab MySQL-serveri maksimaalse samaaegsete ühenduste arvu. Süsteemimuutujaid saab muuta SET
-käsuga, rakendades need kas kogu serverile või ainult seansile.
3. Muutujate deklareerimine ja kasutamine
3.1 Muutuja deklareerimine
Muutujaid saab deklareerida SET
või SELECT INTO
käsuga. SET
võimaldab määrata väärtuse otse.
Näide:
SET @user_name = 'Sato';
SELECT @user_name;
SELECT INTO
käsuga saab päringu tulemuse otse muutujasse salvestada.
Näide:
SELECT name INTO @user_name FROM users WHERE id = 123;
3.2 Muutujate kasutamine päringutes
Muutujaid saab kasutada parameetritena päringutes. Näiteks allpool olev päring toob kasutajainfo, kasutades muutujat @user_id
.
Näide:
SELECT * FROM users WHERE id = @user_id;
Sel viisil saab hoida andmeid samas seansis ja kasutada neid mitmes päringus.
4. Levinud kasutusjuhtumid
4.1 Päringute optimeerimine
Kui sageli kasutatavad andmed salvestatakse muutujasse ja taaskasutatakse, paraneb päringute jõudlus.
Näide:
SELECT MAX(id) INTO @max_id FROM users;
Siin salvestatakse suurim kasutaja ID muutujasse, et seda hiljem taaskasutada.
4.2 Kuupäeva ja aja käsitlemine
Muutujad lihtsustavad ajaga seotud arvutusi ja ajalooliste andmete töötlemist.
Näide:
SELECT NOW() INTO @current_time;
SELECT @current_time - INTERVAL 1 DAY INTO @yesterday;
Nii saab salvestada praeguse aja või määratud ajavahemiku väärtuse ja kasutada seda muudes päringutes.
5. Muutujate kasutamine salvestatud protseduurides
Salvestatud protseduurides kasutatavad muutujad võimaldavad koondada keerulist loogikat ja parandada koodi korduvkasutatavust. Allolev näide toob kasutajainfo salvestatud protseduuri abil.
Näide:
CREATE PROCEDURE get_user_info(IN user_id INT, OUT user_name VARCHAR(255))
BEGIN
SELECT name INTO user_name FROM users WHERE id = user_id;
END;
6. Parimad tavad muutujate kasutamisel
6.1 Initsialiseerimise tähtsus
Muutujad tuleks alati enne kasutamist initsialiseerida. Kui initsialiseerimata muutujat viidatakse, võib tagastada NULL
. Seda on eriti oluline jälgida, kui sama muutujaid kasutatakse mitmes päringus.
6.2 Seansi ulatuse haldamine
Kasutaja määratud muutujad kehtivad ainult seansi jooksul. Kui seanss lõpeb, lähtestatakse ka muutujad. Kui muutujaid on vaja kasutada mitmes seansis, tuleks kaaluda muid lahendusi (näiteks ajutisi tabeleid).
7. Täpsemad tehnikad
7.1 Kursori kasutamine andmetöötluses
Suure andmemahtude töötlemisel saab kursori abil päringu tulemusi töödelda rida-realt, salvestades väärtused muutujatesse.
Näide:
DECLARE cursor_user CURSOR FOR SELECT id, name FROM users;
8. Kokkuvõte
MySQL-i muutujad võimaldavad päringute tõhusamat haldamist ning parandavad koodi loetavust ja jõudlust. Kasutaja määratud ja süsteemimuutujate õige kombineerimine muudab andmetöötluse paindlikumaks. Koos salvestatud protseduuride ja kursori tehnikatega saab MySQL-is saavutada oluliselt parema andmetöötluse.