1. Sissejuhatus
MySQL kasutatakse paljudes veebirakendustes ja andmebaaside haldamisel ning andmete uuendamine on igapäevase töö ja rakenduste hoolduse jaoks äärmiselt oluline. Eriti suurte andmemahuga süsteemide või olukordade puhul, kus tuleb korraga uuendada mitu kirjet, on vajalik MySQL-i UPDATE-lause kasutamine tõhusaks toimimiseks.
See artikkel selgitab üksikasjalikult, kuidas bulk-viisi (massiliselt) uuendada mitu kirjet ja veergu, kasutades MySQL-i UPDATE-lauset. Alates lihtsast kasutamisest kuni keerukamate tingimuslike uuendusteni tutvustame neid järjekorras, muutes selle kasulikuks ressursiks neile, kes soovivad MySQL-iga keerukaid uuendusoperatsioone teha.
2. UPDATE-lause põhisisukord
MySQL UPDATE-lause on süntaks, millega uuendatakse tabelis andmeid kindlate tingimuste alusel. Alustame UPDATE-lause põhisisukorrast ja sellest, kuidas uuendada ühte kirjet või veergu.
Põhisüntaks
MySQL-i UPDATE-lause põhisisukord on järgmine.
UPDATE table_name
SET column1 = value1, column2 = value2, ...
WHERE condition;
- table_name : Määra uuendatava tabeli nimi.
- SET clause : Määra uuendatavad veerud ja nende uued väärtused. Kui uuendad korraga mitu veergu, eralda veeru‑väärtuse paarid komadega.
- WHERE clause : Määra tingimus, mille alusel kirjeid uuendatakse. Kui tingimus jäetakse välja, uuendatakse kõiki tabeli kirjeid, seega ole ettevaatlik.
Ühe kirje või veeru uuendamise näide
Lihtsa kasutusnäitena vaatame, kuidas uuendada ühte kirjet või veergu.
UPDATE users
SET name = 'Tanaka'
WHERE id = 1;
See SQL-lause uuendab users tabelis kirje, mille id on 1, veeru name väärtuseks “Tanaka”. WHERE-lause määramisega saad uuendada ainult konkreetset kirjet.

3. Mitme kirje massiline uuendamine
Massiliselt mitme kirje uuendamisel saab WHERE-lausele määrata mitu tingimust. Näiteks võid kasutada IN- või OR-lauseid, et määrata mitu tingimust ja tõhusalt uuendada mitut kirjet.
Mitme kirje uuendamine IN-lausega
IN-lause kasutamine võimaldab uuendada kirjeid, mis vastavad kindlale väärtuste loendile.
UPDATE users
SET status = 'active'
WHERE id IN (1, 3, 5, 7);
Selles SQL-lausees users tabelis uuendatakse kirjeid, mille id on 1, 3, 5 või 7, veeru status väärtuseks ‘active’. IN-lause kasutamine võimaldab massiliselt uuendada mitu kirjet, mis vastavad tingimusele.
Mitme tingimuse määramine OR-lausega
OR-lause võimaldab kombineerida ja määrata mitu tingimust.
UPDATE users
SET status = 'inactive'
WHERE id = 2 OR id = 4 OR id = 6;
Selles SQL-lausees uuendatakse kirjeid, mille id on 2, 4 või 6, veeru status väärtuseks ’inactive’. OR-lause kasutamine võimaldab korraga uuendada kirjeid, mis vastavad mitmele tingimusele.
4. Mitme veeru samaaegne uuendamine
MySQL-i UPDATE-lausega saab korraga uuendada mitu veergu. See on kasulik, kui tuleb korraga muuta mitut teavet, säilitades samal ajal andmete järjepidevuse.
Mitme veeru uuendamise näide
Korraga mitme veeru uuendamisel määra veergude nimed ja väärtused SET-lause sees, eraldades need komadega.
UPDATE products
SET price = price * 1.1, stock = stock - 1
WHERE id = 10;
Selles SQL-lausees products tabelis, kus id on 10, suurendatakse veergu price 10% ja vähendatakse veergu stock väärtust 1 võrra. Määrates SET-lausele mitu veergu, saab tõhusalt uuendada mitut teavet.
5. Tingimuslik uuendamine CASE-lausega
MySQL-i UPDATE-lausega saab kasutada CASE‑avaldisi, et määrata tingimuste alusel erinevaid väärtusi. See võimaldab paindlikult muuta uuendamise sisu mitme tingimuse põhjal, muutes keerukad uuendusoperatsioonid lihtsaks.
Põhisüntaks CASE‑avaldiste kasutamisel
The basic syntax for an UPDATE statement using a CASE expression is as follows.
UPDATE table_name
SET column_name = CASE
WHEN condition1 THEN value1
WHEN condition2 THEN value2
...
ELSE default_value
END
WHERE condition;
- Veeru nimi : Määrab veeru, mida soovite uuendada.
- Tingimus : Määrake tingimus WHEN‑lausendis ja seadke THEN‑lausendis rakendatav väärtus, kui see vastab.
- Vaikimisi väärtus : Väärtus, mis määratakse, kui ükski tingimus ei vasta (valikuline).
Praktikaline näide CASE‑i kasutamisel
Siin vaatleme näidet, mis uuendab employees tabeli palkasid tööpositsiooni alusel.
UPDATE employees
SET salary = CASE
WHEN position = 'Manager' THEN salary * 1.1
WHEN position = 'Developer' THEN salary * 1.05
WHEN position = 'Intern' THEN salary * 1.02
ELSE salary
END;
Selles SQL-lausees uuendatakse iga employees tabeli kirje salary veergu vastavalt position veeru väärtusele.
Tingimuslik mitme veeru uuendamine
CASE‑avaldisi saab rakendada ka mitmele veerule. Allolevas näites uuendatakse employees tabeli salary ja bonus veerge erinevate väärtustega, sõltuvalt tööpositsioonist ja teenistusaastatest.
UPDATE employees
SET
salary = CASE
WHEN position = 'Manager' AND years_of_service >= 5 THEN salary * 1.15
WHEN position = 'Developer' AND years_of_service >= 3 THEN salary * 1.1
ELSE salary
END,
bonus = CASE
WHEN position = 'Manager' THEN bonus + 1000
WHEN position = 'Developer' THEN bonus + 500
ELSE bonus
END;
Selles SQL-lausees uuendatakse palkasid ja boonuseid korraga tingimuslikult, lähtudes tööpositsioonist ja teenistusaastatest. CASE‑avaldiste kasutamine võimaldab paindlikke uuendusi mitme tingimuse alusel. 
6. Mitme tabeli uuendamine JOIN‑i abil
MySQL-is saate kasutada JOIN‑lauset, et ühendada mitu tabelit ja uuendada kirjeid kindlate tingimuste alusel. See võimaldab viidata andmetele erinevatest tabelitest ühe tabeli uuendamise ajal, võimaldades keerukat andmete manipuleerimist.
UPDATE‑lausete põhisüntaks JOIN‑i kasutamisel
Mitme tabeli uuendamisel JOIN‑iga on põhisüntaks järgmine.
UPDATE tableA
JOIN tableB ON tableA.column = tableB.column
SET tableA.updated_column = new_value
WHERE condition;
- Tabel A ja Tabel B : Määrake uuendamise sihttabel (Tabel A) ja viitetabel (Tabel B).
- ON‑lausend : Määrake JOIN‑tingimus ja defineerige, millise veeru alusel tabelid ühendada.
- SET‑lausend : Määrake uuendatav veerg ja selle uus väärtus.
- WHERE‑lausend : Määrake uuendamise tingimus, uuendades ainult sobivaid kirjeid.
Praktikaline näide JOIN‑i kasutamisel
Näiteks vaatleme näidet, kus orders tabel liidetakse customers tabeliga, et uuendada konkreetse kliendi seotud tellimuste olekut.
UPDATE orders
JOIN customers ON orders.customer_id = customers.id
SET orders.status = 'Shipped'
WHERE customers.vip_status = 'Yes';
Selles SQL-lausees uuendatakse orders tabeli status veergu nendele tellimustele, mille customers tabeli vip_status on “Yes”, väärtuseks “Shipped”. JOIN‑lausendi kasutamisega saate uuendada teavet teiste tabelite andmete alusel.
JOIN‑uuendus mitme tingimusega
Saate kombineerida mitu tingimust, et määrata täpsemad kriteeriumid. Allolevas näites muudetakse konkreetse kliendi seotud tellimuste olekut massiliselt tingimuste alusel.
UPDATE orders
JOIN customers ON orders.customer_id = customers.id
SET orders.status = CASE
WHEN customers.vip_status = 'Yes' THEN 'Priority'
WHEN customers.vip_status = 'No' AND orders.amount > 10000 THEN 'Review'
ELSE orders.status
END
WHERE orders.date >= '2024-01-01';
Kasutades JOIN‑i, saate teha paindlikke andmete uuendusi, mis kohanduvad tingimustega.
7. Jõudlus ja kaalutlused
Kui kasutad MySQL UPDATE‑lauseid, et muuta korraga mitut rida või veergu, eriti suurte andmekogumite korral, tuleb arvestada jõudlusega. Allpool on võtmetähtsusega punktid ja ettevaatusabinõud, mida peaksid teadma, et parandada uuendamise jõudlust ja säilitada andmete terviklikkus.
Jõudluse optimeerimise näpunäited
Indeksite kasutamine
Kui uuendad kirjeid konkreetsete tingimuste alusel, kasutades WHERE‑lause, aitab asjakohaste veergude indekseerimine otsingu kiirust parandada. Indeksid suurendavad päringu jõudlust, võimaldades tõhusat töötlemist isegi siis, kui uuendus sihib suurt andmemahu.
CREATE INDEX idx_customer_id ON orders(customer_id);
Kuid liiga paljude indeksite olemasolu võib tegelikult jõudlust halvendada, seega on soovitatav indekseerida ainult olulised veerud.
Koormuse vähendamine pakktöötlusega
Suurte arvude ridade korraga uuendamine võib panna andmebaasiserverile suurt koormust ja aeglustada vastamisaegu. Suurte uuenduste korral võib pakktöötluse kasutamine (operatsiooni täitmine mitmes etapis) serveri koormust vähendada.
UPDATE orders
SET status = 'Processed'
WHERE status = 'Pending'
LIMIT 1000;
Kombineerides seda skriptiga, saad korduvate pakktöötluste abil tõhusalt andmeid muuta.
Tehingute kasutamine
Kui mitu UPDATE‑lauset on omavahel seotud või andmete terviklikkus on kriitiline, tagab tehing kasutamine järjepidevuse. Tehinguga saab uuendamise käigus tekkinud vea korral tagasi võtta kõik muudatused.
START TRANSACTION;
UPDATE accounts SET balance = balance - 500 WHERE id = 1;
UPDATE accounts SET balance = balance + 500 WHERE id = 2;
COMMIT;
Lukustamise haldamine
UPDATE‑i täitmine võib põhjustada tabeli lukkude tekkimist. See on eriti oluline, kui mitu kasutajat pääsevad sama tabeli juurde korraga. Näiteks ridade taseme lukustamine võimaldab teistel kasutajatel töötada erinevate ridadega samal ajal, võimaldades paralleelset töötlemist. Täistabeli lukustamise vältimine parandab andmebaasi reageerimisvõimet. 
8. Kokkuvõte
Selles artiklis andsime üksikasjaliku selgituse tõhusate meetodite kohta, kuidas MySQL UPDATE‑lausega uuendada mitut kirjet ja veergu, hõlmates kõike alates põhilisest kasutamisest kuni täiustatud tehnikateni. MySQL‑is mitme andmeüksuse uuendamisel tuleb arvestada andmemahuga, töötlemiskiirusega ja andmete terviklikkusega.
Peamiste punktide ülevaade
- UPDATE‑lause põhialused
- UPDATE‑lause põhisüntaksi mõistmine võimaldab sul turvaliselt uuendada üksikuid veerge või kirjeid.
- Mitme kirje massiline uuendamine
- Näitasime, kuidas tõhusalt uuendada mitut kirjet, mis vastavad konkreetsetele tingimustele, kasutades WHERE‑, IN‑ ja OR‑lauseid.
- Mitme veeru samaaegne uuendamine
- Kasutades SET‑lause, saad ühe kirje sees korraga uuendada mitut veergu, võimaldades tõhusaid uuendusi, säilitades samal ajal andmete järjepidevuse.
- Tingimuslikud uuendused CASE‑lausega
- CASE‑lause kasutamine võimaldab teha ühe operatsiooni käigus erinevaid uuendusi tingimuste alusel, lihtsustades keerukat uuendusloogikat.
- Mitme tabeli uuendamine JOIN‑i abil
- Viidates teiste tabelite andmetele konkreetsete kirjete uuendamisel, saad parandada kogu andmebaasi terviklikkust.
- Jõudlus ja kaalutlused
- Õppisime, kuidas teha tõhusaid ja turvalisi andmeuuendusi, kasutades indekseid, pakktöötlust ja tehinguid. Samuti oleme teadlikud lukustamise haldamisest, et optimeerida andmebaasi jõudlust.
Kokkuvõte
Andmete tõhus uuendamine MySQL‑is on eriti oluline oskus andmebaaside haldamisel. UPDATE‑lause valdamine võib suurendada töö efektiivsust ja optimeerida kogu süsteemi jõudlust. Rakenda kindlasti selles artiklis esitatud tehnikaid oma reaalses töös ja projektides.

