MySQL UPDATE සමඟ SELECT: උප-විමසුම්, JOINs, සහ කාර්ය සාධන අනුකූල කිරීම සඳහා සම්පූර්ණ මාර්ගෝපදේශය

目次

1. හැඳින්වීම

MySQL යනු බොහෝ වෙබ් යෙදුම් සහ පද්ධතිවල භාවිතා වන ප්‍රධාන දත්ත ගබඩා කළමනාකරණ පද්ධති之一 වේ. එහි බොහෝ විශේෂාංග අතර, “දත්ත යාවත්කාලීන කිරීම” යනු දෛනික දත්ත ගබඩා කළමනාකරණයේ අත්‍යවශ්‍ය ක්‍රියාවලියකි. විශේෂයෙන්, වෙනත් වගු හෝ ගණනයේ ප්‍රතිඵල මත පදනම්ව පවතින දත්ත යාවත්කාලීන කරන විට, UPDATE ප්‍රකාශය SELECT ප්‍රකාශය සමඟ එකතු කිරීම අවශ්‍ය වේ.

මෙම ලිපියේ, MySQL හි UPDATE ප්‍රකාශය SELECT සමඟ එකතු කරමින් උසස් දත්ත සැකසීමේ තාක්ෂණයන් පැහැදිලි කරමු. මූලික කරුණු ආරම්භක‑හිතකාමී ආකාරයෙන් ආරම්භ කරමින්, වාස්තු විශේෂිත අවස්ථා වල ප්‍රයෝජනවත් ව්‍යාහාරික උදාහරණද ඉදිරිපත් කරමු. මෙම මාර්ගෝපදේශය, කාර්යක්ෂම දත්ත ගබඩා යාවත්කාලීන ක්‍රම ඉගෙන ගැනීමට හෝ SQL කුසලතා වැඩිදියුණු කිරීමට කැමති අයට සුදුසුය.

2. UPDATE ප්‍රකාශයේ මූලික ව්‍යවස්ථාව

පළමුව, UPDATE ප්‍රකාශයේ මූලික කරුණු සමාලෝචනය කරමු. UPDATE ප්‍රකාශය වගුවක නියමිත පේළි හෝ බහු පේළි වෙනස් කිරීමට භාවිතා වේ.

මූලික ව්‍යවස්ථාව

UPDATE ප්‍රකාශයේ මූලික ව්‍යවස්ථාව පහත පරිදි වේ:

UPDATE table_name
SET column_name = new_value
WHERE condition;
  • table_name : යාවත්කාලීන කිරීමට අවශ්‍ය වගුවේ නාමය.
  • column_name : යාවත්කාලීන කිරීමට අවශ්‍ය තීරුවේ නාමය.
  • new_value : තීරුවට නියම කරන අගය.
  • condition : කුමන පේළි යාවත්කාලීන වනු දැයි සීමා කරන කොන්දේසි ප්‍රකාශනය.

සරල උදාහරණය

උදාහරණයක් ලෙස, නිෂ්පාදනයක මිල යාවත්කාලීන කිරීම:

UPDATE products
SET price = 100
WHERE id = 1;

මෙම විමසුම products වගුවේ id 1 වන නිෂ්පාදනයේ මිල 100 ලෙස යාවත්කාලීන කරයි.

බහු තීරු යාවත්කාලීන කිරීම

ඔබට එකවර බහු තීරුද යාවත්කාලීන කළ හැකිය:

UPDATE employees
SET salary = 5000, position = 'Manager'
WHERE id = 2;

මෙම උදාහරණයේ, employees වගුවේ id 2 වන සේවකයාගේ salary සහ position දෙකම එකවර යාවත්කාලීන වේ.

WHERE වාක්‍යයේ වැදගත්කම

ඔබ WHERE වාක්‍යය අත්හැරුවහොත්, වගුවේ සියලු පේළි යාවත්කාලීන වේ. මෙය අනවශ්‍ය ලෙස දත්ත වෙනස් කරනු ඇත, එබැවින් අවධානයෙන් ක්‍රියා කළ යුතුය.

UPDATE products
SET price = 200;

මෙම විමසුම products වගුවේ සියලු නිෂ්පාදනවල මිල 200 ලෙස සකසයි.

3. SELECT සමඟ උසස් UPDATE

MySQL හි, UPDATE සහ SELECT ප්‍රකාශ එකට එකතු කර, වෙනත් වගු හෝ විශේෂිත කොන්දේසි මත පදනම්ව ලේඛන යාවත්කාලීන කළ හැකිය. මෙම කොටසේ, SELECT භාවිතා කරමින් “උපවිමසුම” ක්‍රමය සහ “JOIN” ක්‍රමය යන ප්‍රධාන දෙකේ පදනම් කරුණු පැහැදිලි කරමු.

3.1 උපවිමසුම (Subquery) භාවිතා කර UPDATE

උපවිමසුමක් භාවිතා කර, SELECT ප්‍රකාශයක් මගින් විශේෂ කොන්දේසි සපුරන දත්ත ලබාගෙන, එම ප්‍රතිඵලය භාවිතා කර යාවත්කාලීන කිරීම සිදු කළ හැකිය. මෙම ක්‍රමය ව්‍යුහයෙන් සරල වන අතර, භාවිතයට ඉතා ස flexibilයයි.

මූලික ව්‍යවස්ථාව

UPDATE table_name
SET column_name = (SELECT column_name FROM other_table WHERE condition)
WHERE condition;

උදාහරණය

උදාහරණයක් ලෙස, product_stats වගුවේ සග්‍රහිත සාමාන්‍ය මිල මත products වගුවේ මිල යාවත්කාලීන කිරීම ගැන සිතන්න.

UPDATE products
SET price = (SELECT average_price FROM product_stats WHERE product_stats.product_id = products.id)
WHERE EXISTS (SELECT * FROM product_stats WHERE product_stats.product_id = products.id);
  • ප්‍රධාන කරුණු:
  • උපවිමසුම යාවත්කාලීන කිරීම සඳහා භාවිතා කරන අගය ලබා දෙයි.
  • EXISTS භාවිතා කර, උපවිමසුමේ ප්‍රතිඵල පවතින විට පමණක් යාවත්කාලීන සිදු වේ.

වැදගත් සටහන්

  • උපවිමසුම එකම අගයක් පමණක් ලබා දිය යුතුය: උපවිමසුම බහු පේළි ලබා දුන්නේ නම්, Subquery returns more than one row වැනි දෝෂයක් සිදුවේ. මෙය වැළැක්වීමට, LIMIT හෝ එකතුකාරක ක්‍රියා (උදා. MAX, AVG) භාවිතා කර ප්‍රතිඵලය එක පේළියකට සීමා කරන්න.

3.2 JOIN භාවිතා කර UPDATE

බොහෝ අවස්ථාවල, UPDATE ප්‍රකාශයේ JOIN භාවිතා කිරීම උපවිමසුමට වඩා වැඩි කාර්යක්ෂමතාව ලබා දේ. විශාල ප්‍රමාණයේ දත්ත යාවත්කාලීන කිරීමේදී මෙම ක්‍රමය විශේෂයෙන් සුදුසුය.

මූලික ව්‍යවස්ථාව

UPDATE tableA
JOIN tableB ON condition
SET tableA.column_name = tableB.column_name
WHERE condition;

උදාහරණය

ඊළඟට, සම්බන්ධිත ගනුදෙනුකරුගේ default_discount මත පදනම්ව orders වගුවේ වට්ටම් අනුපාතය යාවත්කාලීන කිරීම ගැන සලකා බලන්න.

UPDATE orders AS o
JOIN customers AS c ON o.customer_id = c.id
SET o.discount = c.default_discount
WHERE c.vip_status = 1;
  • ප්‍රධාන කරුණු:
  • JOIN භාවිතා කිරීමෙන් බහු වගු එකතු කරමින් කාර්යක්ෂම යාවත්කාලීන කිරීම් සිදු කළ හැක.
  • මෙම උදාහරණයේ, orders වගුවේ වට්ටම customers වගුවේ VIP ගනුදෙනුකරුවන් සඳහා පමණක් යාවත්කාලීන වේ.

වැදගත් සටහන්

  • කාර්යක්ෂමතාව: JOIN-අධාරිත UPDATE ප්‍රකාශන විශාල දත්ත කට්ටල සඳහා කාර්යක්ෂම වුවත්, සම්බන්ධතා කොන්දේසි සඳහා සුදුසු දර්ශක (indexes) නිර්වචනය නොකළහොත් කාර්යක්ෂමතාව අඩුවිය හැක.

උපවිමසුම සහ JOIN අතර වෙනස

ItemSubqueryJOIN
Ease of UseSimple and flexibleMore complex but efficient
PerformanceSuitable for small datasetsIdeal for large datasets and multi-table updates
Implementation DifficultyBeginner-friendlyRequires more careful condition setup

4. කාර්යක්ෂම UPDATE ප්‍රකාශන සඳහා තාක්ෂණ

MySQL හි දත්ත යාවත්කාලීන කිරීම සරල වාක්‍ය රචනයක් සමඟ සිදු කළ හැකි නමුත්, විශාල දත්ත කට්ටල හෝ නිතර යාවත්කාලීන කිරීම් සමඟ කටයුතු කරන විට, කාර්යක්ෂමතාව සහ ආරක්ෂාව දෙකම සැලකිල්ලට ගන්නා කාර්යක්ෂම ක්‍රමයක් අවශ්‍ය වේ. මෙම කොටසේ, UPDATE ප්‍රකාශන අනුකූල කිරීම සඳහා ප්‍රායෝගික තාක්ෂණ හඳුන්වා දෙනු ඇත.

4.1 වෙනස්කම් අවශ්‍ය වන විට පමණක් යාවත්කාලීන කරන්න

දත්ත යාවත්කාලීන කිරීමේදී, සැබවින්ම වෙනස්කම් අවශ්‍ය වන පේළි පමණක් ඉලක්ක කිරීම අනිවාර්ය ලිඛිත ක්‍රියාකාරකම් අඩු කර කාර්යක්ෂමතාව වැඩි කරයි.

මූලික වාක්‍ය රචනය

UPDATE table_name
SET column_name = new_value
WHERE column_name != new_value;

උදාහරණය

මෙම උදාහරණය, වත්මන් මිල නව මිලට වඩා වෙනස් වන විට පමණක් නිෂ්පාදන මිල යාවත්කාලීන කරයි:

UPDATE products
SET price = 150
WHERE price != 150;
  • ලාභ:
  • අනිවාර්ය ලිඛිත ක්‍රියාකාරකම් වලින් වැළකී සිටී.
  • දත්ත ගබඩා අගුළු කාලය අඩු කරයි.

4.2 කොන්දේසිමය යාවත්කාලීන සඳහා CASE භාවිතා කරන්න

විශේෂ කොන්දේසි අනුව වෙනස් අගයන් සකස් කිරීමට අවශ්‍ය නම්, CASE ප්‍රකාශනය භාවිතා කිරීම ඉතා පහසුය.

මූලික වාක්‍ය රචනය

UPDATE table_name
SET column_name = CASE
    WHEN condition1 THEN value1
    WHEN condition2 THEN value2
    ELSE default_value
END;

උදාහරණය

මෙම උදාහරණය, කාර්ය සාධන ශ්‍රේණි අනුව සේවක වැටුප් යාවත්කාලීන කරයි:

UPDATE employees
SET salary = CASE
    WHEN performance = 'high' THEN salary * 1.1
    WHEN performance = 'low' THEN salary * 0.9
    ELSE salary
END;
  • ප්‍රධාන කරුණු:
  • කොන්දේසි මත පදනම්ව ලවච්චි යාවත්කාලීන කිරීම් සක්‍රිය කරයි.
  • ප්‍රායෝගික අවස්ථා වල සාමාන්‍යයෙන් භාවිතා වේ.

4.3 ගනුදෙනු (Transactions) සමඟ ආරක්ෂාව සහතික කරන්න

බහු යාවත්කාලීන කිරීම් සිදු කරන විට, ගනුදෙනුවක් භාවිතා කර මෙහෙයුම් සමූහ කිරීම ආරක්ෂාව සහ සමතුලිතතාවය තහවුරු කරයි.

මූලික වාක්‍ය රචනය

START TRANSACTION;
UPDATE table1 SET ... WHERE condition;
UPDATE table2 SET ... WHERE condition;
COMMIT;

උදාහරණය

මෙම උදාහරණය, ගනුදෙනුවක් භාවිතා කර දෙකේ ගිණුම් අතර මාරුකිරීම කළමනාකරණය කරයි:

START TRANSACTION;
UPDATE accounts SET balance = balance - 100 WHERE id = 1;
UPDATE accounts SET balance = balance + 100 WHERE id = 2;
COMMIT;
  • ප්‍රධාන කරුණු:
  • ක්‍රියාවලියේ මැදදී දෝෂයක් සිදුවුවහොත්, ROLLBACK භාවිතයෙන් වෙනස්කම් අහෝසි කළ හැක.
  • දත්ත අඛණ්ඩතාව රැක ගැනීමට උපකාරී වේ.

4.4 දර්ශක (Indexes) සමඟ කාර්යක්ෂමතාව වැඩි කරන්න

UPDATE කොන්දේසි වල භාවිතා වන තීරුවල දර්ශක (indexes) නිර්මාණය කිරීම සෙවීමේ වේගය සහ සමස්ත කාර්යක්ෂමතාව වැඩි කරයි.

මූලික උදාහරණය

CREATE INDEX idx_price ON products(price);

මෙය price භාවිතා කරන UPDATE මෙහෙයුම් වේගවත් කරයි.

4.5 තොග (Batch) සැකසීම සමඟ විශාල දත්ත කට්ටල යාවත්කාලීන කරන්න

විශාල ප්‍රමාණයේ දත්ත එකවර යාවත්කාලීන කිරීම දත්ත ගබඩා භාරය වැඩි කර කාර්යක්ෂමතාව අඩු කරයි. එවැනි අවස්ථාවල, කුඩා තොගවලින් යාවත්කාලීන කිරීම ප්‍රභාවී වේ.

මූලික වාක්‍ය රචනය

UPDATE table_name
SET column_name = new_value
WHERE condition
LIMIT 1000;
  • උදාහරණය:
  • එකවර 1,000 පේළි සැකසීම සහ ස්ක්‍රිප්ට් එකක ලූප් කිරීම.

5. අවවාද සහ හොඳ පුරුදු

MySQL හි UPDATE ප්‍රකාශය ශක්තිමත් වේ, නමුත් වැරදි භාවිතය කාර්ය සාධන අඩු වීම හෝ දත්ත අසමතුලිතතාවයක් ඇති කරයි. මෙම කොටසේ, අපි UPDATE භාවිතා කිරීමේ ප්‍රධාන අවවාද සහ හොඳම ක්‍රියා පටිපාටි ගැන පැහැදිලි කරමු.

5.1 ගනුදෙනු භාවිතා කිරීම

බහු UPDATE ප්‍රකාශ ආරක්ෂිතව ක්‍රියාත්මක කිරීමට, ගනුදෙනු භාවිතා කිරීම නිර්දේශිත වේ. මෙය ක්‍රියාත්මක කිරීමේදී දෝෂයක් සිදු වුවත් දත්ත අසමතුලිතතාවය රැක ගැනීමට උපකාරී වේ.

අවවාද

  • ගනුදෙනුව ආරම්භ කිරීම අමතක කිරීම: ඔබ START TRANSACTION යනුවෙන් පැහැදිලිව ලියන්නේ නැත්නම්, ගනුදෙනුව සක්‍රිය නොවේ.
  • කමිට් සහ රෝල්බැක්: සාර්ථකත්වයේ COMMIT භාවිතා කිරීම සහ දෝෂයේ ROLLBACK භාවිතා කිරීම අත්‍යවශ්‍යයි.

හොඳම ක්‍රියා පටිපාටි උදාහරණය

START TRANSACTION;

UPDATE accounts SET balance = balance - 100 WHERE id = 1;
UPDATE accounts SET balance = balance + 100 WHERE id = 2;

COMMIT;

මෙම උදාහරණයේ, මැදදී දෝෂයක් සිදු වුවත්, ROLLBACK භාවිතා කරමින් ඔබට දත්ත මුල් තත්ත්වයට පසුබැසිය හැක.

5.2 සුදුසු ලෙස ඉන්ඩෙක්ස් සකස් කිරීම

UPDATE කොන්දේසි වල භාවිතා වන තීරුවල ඉන්ඩෙක්ස් සෑදීම සෙවීමේ වේගය සහ සමස්ත කාර්ය සාධනය වැඩි කරයි.

අවවාද

  • ඉතා වැඩි ඉන්ඩෙක්ස්: අධික ඉන්ඩෙක්ස් කිරීම යාවත්කාලීන කිරීමේදී අතිරේක පූර්ණභාරය වැඩි කරයි. අවශ්‍යතම ඉන්ඩෙක්ස් පමණක් තබා ගන්න.

හොඳම ක්‍රියා පටිපාටි උදාහරණය

නිෂ්පාදන මිල යාවත්කාලීන කරන විට, price සහ id වැනි තීරුවල ඉන්ඩෙක්ස් කිරීම ප්‍රයෝජනවත් වේ:

CREATE INDEX idx_price ON products(price);
CREATE INDEX idx_id ON products(id);

මෙය WHERE කොටසේ price හෝ id භාවිතා කරන යාවත්කාලීන විමසුම් වේගවත් කිරීමට උපකාරී වේ.

5.3 ලොක් කළමනාකරණය

MySQL හි UPDATE ක්‍රියාත්මක කරන විට, බලපෑම් ලැබූ පේළි වල ලොක් එකක් පවරා ඇත. ඔබ එකවර විශාල ප්‍රමාණයේ දත්ත යාවත්කාලීන කරන්නේ නම්, එය අනෙකුත් විමසුම් වලට බලපායි.

අවවාද

  • දිගු කාලීන ලොක්: ලොක් එක දිගු කාලයක් පවත්නා විට, අනෙකුත් ගනුදෙනු රැඳී සිටීමට සිදු වෙයි, එමඟින් සමස්ත පද්ධති කාර්ය සාධනය අඩු වේ.

හොඳම ක්‍රියා පටිපාටි උදාහරණය

  • යාවත්කාලීන කරන පේළි ගණන සීමා කරන්න (බැච් ප්‍රොසෙසින් භාවිතා කරන්න).
  • WHERE කොටස භාවිතා කර ඉලක්ක පරාසය සීමා කරන්න.
    UPDATE orders
    SET status = 'completed'
    WHERE status = 'pending'
    LIMIT 1000;
    

5.4 උප-විමසුම් භාවිතා කිරීමේ සටහන්

UPDATE තුළ SELECT ප්‍රකාශයක් භාවිතා කරන විට, උප-විමසුම බහු පේළි ලබා දුන්නේ නම් දෝෂ සිදුවේ. එසේම, උප-විමසුම විශාල දත්ත කට්ටලයක් සකස් කරන විට කාර්ය සාධන අඩු විය හැක.

අවවාද

  • ප්‍රතිඵල එක පේළියකට සීමා කරන්න: එක පේළියක් පමණක් ලබා දීමට එකතු කිරීමේ ක්‍රියා (උදාහරණයක් ලෙස MAX, AVG) හෝ LIMIT භාවිතා කරන්න.

හොඳම ක්‍රියා පටිපාටි උදාහරණය

UPDATE products
SET price = (
  SELECT AVG(price)
  FROM product_stats
  WHERE product_stats.category_id = products.category_id
)
WHERE EXISTS (
  SELECT * FROM product_stats WHERE product_stats.category_id = products.category_id
);

5.5 ක්‍රියාත්මක සැලැස්ම පරීක්ෂා කිරීම

සංකීර්ණ UPDATE විමසුම් ක්‍රියාත්මක කිරීමට පෙර, EXPLAIN භාවිතා කර ක්‍රියාත්මක සැලැස්ම සමාලෝචනය කර කාර්ය සාධන ගැටළු පෙරදැක්විය හැක.

හොඳම ක්‍රියා පටිපාටි උදාහරණය

EXPLAIN UPDATE products
SET price = 200
WHERE category_id = 1;

මෙය ඔබට ඉන්ඩෙක්ස් නිසි ලෙස භාවිතා කර ඇතිද, සම්පූර්ණ වගුවක් පරික්ෂා කරමින් තිබේද යන්න තහවුරු කිරීමට උපකාරී වේ.

5.6 උපස්ථාන (බැක්අප්) සහතික කිරීම

ඔබ UPDATE ප්‍රකාශය වැරදි ලෙස ක්‍රියාත්මක කළහොත්, විශාල දත්ත අහිමි විය හැක. ඒ නිසා, වැදගත් මෙහෙයුම් කිරීමට පෙර දත්ත ගබඩා උපස්ථානයක් (බැක්අප්) සකස් කිරීම නිර්දේශිත වේ.

හොඳම ක්‍රියා පටිපාටි උදාහරණය

MySQL හි dump මෙවලම භාවිතා කර උපස්ථානයක් සකස් කරන්න:

mysqldump -u username -p database_name > backup.sql

6. FAQ (නිතර අසන ප්‍රශ්න)

MySQL හි UPDATE ප්‍රකාශය සම්බන්ධ නිතර අසන ප්‍රශ්න කිහිපයක් සහ ඒවායේ පිළිතුරු මෙහි ඇත. මෙම තොරතුරු ප්‍රායෝගික සැකයන් විසඳීමට සහ නිතර අවස්ථා වල දත්ත යාවත්කාලීන කිරීම කාර්යක්ෂමව කර ගැනීමට උපකාරී වේ.

Q1: එක UPDATE ප්‍රකාශයක් භාවිතා කර බහු වගු එකවර යාවත්කාලීන කළ හැද?

A1:
MySQL හි, ඔබට එක් UPDATE ප්‍රකාශයක් සමඟ එකවර බහු වගු යාවත්කාලීන කළ නොහැක. එහෙත්, ඔබට JOIN එකක් භාවිතා කර බහු වගු එකතු කර එක් ඉලක්ක වගුවක දත්ත යාවත්කාලීන කළ හැක.

උදාහරණය: JOIN භාවිතයෙන් වගුවක් යාවත්කාලීන කිරීම

UPDATE orders AS o
JOIN customers AS c ON o.customer_id = c.id
SET o.discount = c.default_discount
WHERE c.vip_status = 1;

Q2: UPDATE ප්‍රකාශයක්ගේ කාර්ය සාධනය කෙසේ වැඩිදියුණු කළ හැකිද?

A2:
පහත පරිදි ක්‍රම භාවිතා කර ඔබට කාර්ය සාධනය වැඩිදියුණු කළ හැක:

  • සුදුසු ඉන්ඩෙක්ස් සකසන්න: WHERE කොටසේ භාවිතා වන තීරුවල ඉන්ඩෙක්ස් සකසන්න.
  • අවශ්‍ය නොවන යාවත්කාලීන වලින් වැළකින්න: සැබවින්ම වෙනස්කම් අවශ්‍ය වන පේළි පමණක් ඉලක්ක කරගන්න.
  • බැච් සැකසීම භාවිතා කරන්න: ලොකු දත්ත කට්ටලයන් කුඩා කොටස් වලට බෙදී යාවත්කාලීන කර ලොක් කිරීමේ බලපෑම අඩු කරන්න.

බැච් සැකසීමේ උදාහරණය

UPDATE products
SET stock = stock - 1
WHERE stock > 0
LIMIT 1000;

Q3: UPDATE ප්‍රකාශයක උපවිමසුම් (subqueries) භාවිතා කරන විට මොනවාට අවධානය යොමු කළ යුතුද?

A3:
UPDATE ප්‍රකාශයක උපවිමසුම් භාවිතා කරන විට, පහත කරුණු සලකන්න:

  • උපවිමසුම එක පේළියක් පමණක් ලබා දිය යුතුය: බහු පේළි ලබා දුන්නේ නම් දෝෂයක් සිදුවේ.
  • කාර්ය සාධන සලකා බැලීම: උපවිමසුම් බහුතරයෙන් භාවිතා කිරීම කාර්ය සාධනය අඩු කරයි, විශේෂයෙන් ලොකු දත්ත කට්ටලයන් සමඟ.

උපවිමසුම් උදාහරණය

UPDATE employees
SET salary = (SELECT AVG(salary) FROM department_salaries WHERE employees.department_id = department_salaries.department_id)
WHERE EXISTS (SELECT * FROM department_salaries WHERE employees.department_id = department_salaries.department_id);

Q4: ගනුදෙනුවක් (transaction) භාවිතා නොකර UPDATE ක්‍රියාත්මක කළහොත් මොනවා සිදුවේ?

A4:
ඔබ ගනුදෙනුවක් භාවිතා නොකර ක්‍රියාත්මක කිරීමේදී දෝෂයක් සිදුවුවහොත්, දෝෂයට පෙර සිදු කළ සියලු ක්‍රියාකාරකම් පවත්වාගෙන යනු ඇත. මෙය දත්ත අසමතුලිතතාවයක් ඇති කරයි. විශේෂයෙන් බහු UPDATE ක්‍රියාකාරකම් සිදු කරන විට, දත්ත අසමතුලිතතාවය පවත්වා ගැනීමට ගනුදෙනු භාවිතා කිරීම සුපිරි ය.

ගනුදෙනුවක් භාවිතා කරන උදාහරණය

START TRANSACTION;

UPDATE accounts SET balance = balance - 100 WHERE id = 1;
UPDATE accounts SET balance = balance + 100 WHERE id = 2;

COMMIT;

Q5: ඔබ අහඹු ලෙස කොන්දේසියක් නොදැක්වී UPDATE ක්‍රියාත්මක කළහොත් මොකද කළ යුතුද?

A5:
WHERE කොටසක් නොදැක්වී UPDATE ක්‍රියාත්මක කළහොත්, වගුවේ සියලු පේළි යාවත්කාලීන වේ. මෙය වැලැක්වීමට, වැදගත් ක්‍රියාකාරකම් සිදු කිරීමට පෙර සෑම විටම දත්ත ගබඩා පිටපතක් (backup) සකස් කරන්න. කුඩා පේළි සංඛ්‍යාවක් පමණක් බලපෑම් කර ඇත්නම්, ඒවා අතින් සකස් කළ හැකි අතර හෝ පිටපතකින් දත්ත ප්‍රතිස්ථාපනය කළ හැක.

Q6: MySQL හි UPDATE ප්‍රකාශයක් භාවිතා කරන විට Deadlock (මරණ ලොක්) එකක් හමුවුණා. මොකද කළ යුතුද?

A6:
Deadlock එකක් සිදුවේ බහු ගනුදෙනු එකිනෙකට ලොක් සඳහා බලා සිටින විට. ඔබට මෙය විසඳීමට හෝ වැලැක්වීමට පහත ක්‍රම භාවිතා කළ හැක:

  • යාවත්කාලීන කිරීමේ අනුක්‍රමය සම්මත කිරීම: සියලු ගනුදෙනු එකම අනුක්‍රමයෙන් පේළි යාවත්කාලීන කරන බවට සහතික වන්න.
  • ගනුදෙනු වෙන් කිරීම: එකවර යාවත්කාලීන කරන පේළි ගණන අඩු කර ගනුදෙනු කුඩා කරගන්න.

7. සාරාංශය

මෙම ලිපියේ, අපි MySQL හි UPDATE ප්‍රකාශය කාර්යක්ෂමව භාවිතා කිරීම පිළිබඳ මූලික වාක්‍ය රචනා සිට උසස් තාක්ෂණයන් දක්වා විස්තර කළෙමු. දැන් එක් එක් කොටසින් ප්‍රධාන කරුණු සමාලෝචනය කරමු:

1. හැඳින්වීම

  • MySQL UPDATE ප්‍රකාශය දත්ත ගබඩා ලේඛන වෙනස් කිරීම සඳහා අත්‍යවශ්‍ය මෙවලමකි.
  • SELECT සමඟ ඒකතු කිරීමෙන්, ඔබට අනෙකුත් වගු හෝ ගණනය කළ ප්‍රතිඵල මත පදනම්ව දත්ත කාර්යක්ෂමව යාවත්කාලීන කළ හැක.

2. UPDATE ප්‍රකාශයේ මූලික වාක්‍ය රචනා

  • අපි UPDATE ප්‍රකාශයේ මූලික ව්‍යුහය සහ සරල උදාහරණ සලකා බැලුවෙමු.
  • WHERE කොටස සමඟ කොන්දේසි නියම කිරීමෙන් සියලු පේළි අනිසි ලෙස යාවත්කාලීන වීම වැලැක්විය හැක.

3. SELECT භාවිතා කර උසස් UPDATE

  • උපවිමසුම් (subqueries) භාවිතා කර ලවච්චි යාවත්කාලීන ක්‍රම.
  • JOIN භාවිතා කර කාර්යක්ෂම බහු-වගු යාවත්කාලීන.
  • අපි උපවිමසුම් සහ JOIN අතර වෙනස්කම් සහ සුදුසු භාවිතා අවස්ථාත් සමඟ සංසන්දනය කළෙමු.

4. කාර්යක්ෂම UPDATE ප්‍රකාශ සඳහා තාක්ෂණ

  • වෙනස්කම් අවශ්‍ය වන විට පමණක් යාවත්කාලීන කිරීම, අනවශ්‍ය ලිපින ලිවීම් වළක්වා ගැනීම සඳහා.
  • කොන්ඩිෂනල් යාවත්කාලීන සඳහා CASE ප්‍රකාශන භාවිතා කිරීම.
  • ගනුදෙනු, සුචිකරණය සහ බෑච් ප්‍රොසෙසිං හරහා කාර්ය සාධනය වැඩිදියුණු කිරීම.

5. අනතුරු ඇඟවීම් සහ හොඳම පිළිවෙත්

  • දත්ත අඛණ්ඩතාව පවත්වා ගැනීමේදී ගනුදෙනුවල වැදගත්කම.
  • සුචි සහ ලොක්වල නිසි කළමනාකරණය.
  • උප ප්‍රශ්න භාවිතා කිරීමේදී සහ ක්‍රියාත්මක කිරීමේ සැලසුම් සමාලෝචනය කිරීමේදී සම්භාව්‍ය දෝෂ කළමනාකරණය.

6. ප්‍රශ්න සහ පිළිතුරු

  • අපි UPDATE ප්‍රකාශන පිළිබඳ සුලබ ප්‍රායෝගික ප්‍රශ්න විසඳූහ.
  • මාතෘකාවලට බහු-පුවරු යාවත්කාලීන, ගනුදෙනු වැදගත්කම සහ ඩෙඩ්ලොක් කළමනාකරණය ඇතුළත් විය.

මීළඟ පියවර

මෙම ලිපියෙන් ඔබ ඉගෙන ගත් දේ මත පදනම්ව, පහත පියවර උත්සාහ කරන්න:

  1. වාක්‍ය විධිය තේරුම් ගැනීම තහවුරු කිරීම සඳහා මූලික UPDATE ප්‍රකාශන ක්‍රියාත්මක කරන්න.
  2. වාස්තවික තත්ත්වයන්හිදී SELECT ප්‍රකාශන සහ JOINs ඒකාබද්ධ කිරීම සමඟ පරීක්ෂණ කරන්න.
  3. විශාල දත්ත සෙට් යාවත්කාලීන කිරීමේදී, ගනුදෙනු සහ නිසි සුචිකරණය භාවිතා කරමින් කාර්ය සාධනය ඇගයීම.

ඔබට SQL කුසලතා තවදුරටත් වැඩිදියුණු කිරීමට අවශ්‍ය නම්, පහත මාතෘකා අධ්‍යයනය කිරීම සලකා බලන්න:

  • MySQL සුචි සකස් කිරීම
  • උසස් ගනුදෙනු කළමනාකරණය
  • SQL කාර්ය සාධනය සකස් කිරීම

MySQL UPDATE ප්‍රකාශනය දත්ත සමුදාය ක්‍රියාකාරකම්හි වඩාත් වැදගත් කුසලතාවලින් එකකි. මෙම ලිපිය යොමුකරුවක ලෙස භාවිතා කරන්න සහ ඔබේ ව්‍යාපෘතිවල මෙම තාක්ෂණයන් ඵලදායී ලෙස යෙදෙන්න. ඔබේ කුසලතා තවදුරටත් තියුණු කිරීම සඳහා ප්‍රශ්න ලිවීම සහ පරීක්ෂා කිරීම පුරුදු වන්න!