MySQL muutujad: kasutaja määratud ja süsteemimuutujad koos näidetega

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:

  1. Kasutaja määratud muutujad: ajutised muutujad, mida kasutatakse konkreetse seansi sees.
  2. 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.