MySQL INSERT vs UPDATE: වක්‍රරචනය, උදාහරණ, සහ හොඳම ක්‍රියාමාර්ග (ON DUPLICATE KEY UPDATE සමඟ)

目次

1. ආරම්භය

MySQL යනු වඩාත් පාවිච්චි කරන දත්ත ගබඩා කළමනාකරණ පද්ධති අතර එකකි. එහි මූලික මෙහෙයුම් අතර, INSERT සහ UPDATE යන මූලික SQL ප්‍රකාශන වේ, දත්ත එකතු කිරීම සහ වෙනස් කිරීම සඳහා නිතර භාවිතා වේ. ඒවා ඉ-වාණිජ්‍ය අඩවි සඳහා නිෂ්පාදන තොරතුරු කළමනාකරණය කිරීම, පරිශීලක දත්ත ලියාපදිංචි කිරීම හෝ යාවත්කාලීන කිරීම වැනි දෛනික කාර්යයන්හි වැදගත් භූමිකාවක් ගනී.

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

ඊළඟ කොටසේ, INSERT ප්‍රකාශනයේ මූලික ව්‍යවස්ථාව සහ එය කෙසේ භාවිතා කරන්නේද යන්න පැහැදිලි කරමු. ඔබ SQL මූලික කරුණු සමාලෝචනය කරමින් සිටියත්, නව දෙයක් ඉගෙන ගැනීමට උත්සාහ කරමින් සිටියත්, මෙම අන්තර්ගතය ඔබට ප්‍රයෝජනවත් වනු ඇත.

2. INSERT ප්‍රකාශනය: මූලික ව්‍යවස්ථාව සහ භාවිතය

INSERT ප්‍රකාශනය නව දත්ත දත්ත ගබඩාවකට එක් කිරීමට භාවිතා වේ. MySQL හි ඇති මූලික SQL ප්‍රකාශන අතර එකක් වුවද, එය දත්ත කළමනාකරණයේ පදනමට සහය දීමට අත්‍යවශ්‍ය භූමිකාවක් ගනී. මෙම කොටසේ, අපි මූලික ව්‍යවස්ථාව, ප්‍රායෝගික උදාහරණ, සහ INSERT භාවිතා කරන විට සැලකිලිමත් විය යුතු වැදගත් කරුණු පැහැදිලි කරමු.

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

INSERT ප්‍රකාශනයේ මූලික ව්‍යවස්ථාව පහත පරිදි වේ.

INSERT INTO table_name (column1, column2, ...)
VALUES (value1, value2, ...);
  • table_name : දත්ත ඇතුළත් කිරීමට ඇති වගුවේ නාමය.
  • column1, column2, … : ඇතුළත් කරන අගයන්ට අදාළ තීරු නාමයන්.
  • value1, value2, … : ඇතුළත් කිරීමට අවශ්‍ය සැබෑ දත්ත අගයන්.

උදාහරණය

උදාහරණයක් ලෙස, නව පරිශීලකයකුගේ නාමය සහ ඊ-මේල් ලිපිනය users වගුවට එක් කිරීමට, පහත SQL ප්‍රකාශනය භාවිතා කළ හැක.

INSERT INTO users (name, email)
VALUES ('Taro Yamada', 'taro@example.com');

මෙම ප්‍රකාශනය 'Taro Yamada' නාමය name තීරුවට, සහ 'taro@example.com' ඊ-මේල් ලිපිනය email තීරුවට users වගුවේ ඇතුළත් කරයි.

INSERT විකල්ප

1. එක්වරම බහු පේළි ඇතුළත් කිරීම

ඔබට එක් INSERT ප්‍රකාශනයක් තුළ බහු පේළි ඇතුළත් කළ හැක. පහත උදාහරණයේ, users වගුවට එකවර පරිශීලක දෙදෙනෙකු එක් කරයි.

INSERT INTO users (name, email)
VALUES 
  ('Hanako Yamada', 'hanako@example.com'),
  ('Jiro Sato', 'jiro@example.com');

බහු පේළි ඇතුළත් කිරීමේදී මෙම ක්‍රමය කාර්යක්ෂම වේ.

2. විශේෂිත තීරු වලට පමණක් දත්ත ඇතුළත් කිරීම

සියලු තීරු වලට දත්ත ඇතුළත් කළ යුතු නැත. අවශ්‍ය පරිදි විශේෂිත තීරු වලට පමණක් දත්ත ඇතුළත් කළ හැක.

INSERT INTO users (name)
VALUES ('Ichiro Suzuki');

මෙම අවස්ථාවේ, email තීරුව NULL හෝ එහි පෙරනිමි අගයට (සැකසීම් කර ඇත්නම්) සකස් වේ.

INSERT භාවිතා කිරීමේදී වැදගත් සටහන්

  1. තීරු සහ අගයන් නිවැරදිව ගැළපීම
  • නියම කරන ලද තීරු සංඛ්‍යාව සහ අනුපිළිවෙල VALUES කොටසේ අගයන්ගේ සංඛ්‍යාව සහ අනුපිළිවෙලට ගැළපිය යුතුය.
  • උදාහරණය: sql INSERT INTO users (name, email) VALUES ('Yoko Ota', 'yoko@example.com'); -- Correct
  1. අද්විතීය යතුරු සීමා පරීක්ෂා කිරීම
  • ඇතුළත් කරන දත්ත පවතින දත්ත සමඟ අනුපිළිවෙල නොවන බව පෙර පරීක්ෂා කළ යුතුය.
  • අද්විතීය සීමාවක් උල්ලංඝනය කරන අනුපිළිවෙල දත්ත ඇතුළත් කිරීම දෝෂයක් ඇති කරයි.
  1. අවශ්‍ය විට පෙරනිමි අගයන් භාවිතා කිරීම
  • ඔබ විශේෂිත තීරුවකට අගයක් නොදෙන්නේ නම්, MySQL වගුවේ සැකසීම් (ඇත්නම්) අනුව පෙරනිමි අගය ඇතුළත් කරයි.

3. UPDATE ප්‍රකාශනය: මූලික ව්‍යවස්ථාව සහ භාවිතය

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

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

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

UPDATE table_name
SET column1 = new_value1, column2 = new_value2, ...
WHERE condition;
  • table_name : යාවත්කාලීන කිරීමට ඇති වගුව.
  • SET clause : යාවත්කාලීන කිරීමට ඇති තීරුවල සහ ඒවායේ නව අගයන්.
  • WHERE clause : යාවත්කාලීන වන පේළි තීරණය කරන කොන්දේසිය. එය නොදැක්වූ විට, වගුවේ සියලු පේළි යාවත්කාලීන වේ.

උදාහරණය

Below is an example that updates the email address for a specific user in the users table.

UPDATE users
SET email = 'newemail@example.com'
WHERE id = 1;

This statement updates the email address to newemail@example.com for the user whose id is 1.

UPDATE භාවිතා කිරීමේ වැදගත් සටහන්

1. WHERE කොන්දේසිය වැදගත් වන්නේ ඇයි

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

UPDATE users
SET email = 'sameemail@example.com'; -- Updates all rows

To avoid accidentally modifying all data, always specify the required condition.

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

එකවර බහු තීරු යාවත්කාලීන කිරීමට, SET කොන්දේසියේ ඒවා කොමා වලින් වෙන් කර ලැයිස්තුගත කරන්න.

UPDATE users
SET name = 'Jiro Yamada', email = 'jiro@example.com'
WHERE id = 2;

This statement updates both the name and email address for the user with id 2.

3. වගු අගුළු සහ කාර්ය සාධනය

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

ප්‍රායෝගික උදාහරණ

පරිශීලකගේ සක්‍රිය තත්ත්වය යාවත්කාලීන කිරීම

The example below updates the status to active for users who meet a specific condition.

UPDATE users
SET status = 'active'
WHERE last_login > '2025-01-01';

This statement sets users to active if their last login time is after January 1, 2025.

තොග පරිමාණය අඩු කිරීම

නිෂ්පාදනයේ වත්මන් තොගය මත පදනම්ව තොගය අඩු කිරීමට, SET කොන්දේසියේ සෘජුව ගණනය කළ හැක.

UPDATE products
SET stock = stock - 1
WHERE product_id = 101;

This statement decreases the stock by 1 for the product with product_id 101.

උසස් UPDATE භාවිතය

ඔබට තවත් වගුවක දත්ත භාවිතා කරමින් අගයන් යාවත්කාලීන කළ හැක. උදාහරණයක් ලෙස, වෙනත් වගුවක් සම්බන්ධ කර යාවත්කාලීන කරන රටාවක් මෙහි ඇත.

UPDATE users u
JOIN orders o ON u.id = o.user_id
SET u.last_order_date = o.order_date
WHERE o.order_status = 'completed';

This statement applies the completed order date from the orders table to the users table’s last_order_date column.

සාරාංශය

UPDATE ප්‍රකාශය දත්ත වෙනස් කිරීම සඳහා අත්‍යවශ්‍ය වේ. මූලික ව්‍යවස්ථාව තේරුම්ගෙන WHERE කොන්දේසිය නිසි ලෙස භාවිතා කිරීමෙන්, ඔබට දත්ත ආරක්ෂිතව සහ කාර්යක්ෂමව යාවත්කාලීන කළ හැක. ඊළඟ කොටසෙහි, INSERT සහ UPDATE එකට එකතු කර වැඩි කාර්යක්ෂම මෙහෙයුම් සිදු කරන ආකාරය පැහැදිලි කරමු.

4. INSERT සහ UPDATE එකට එකතු කිරීම

MySQL හි, ඔබට INSERT සහ UPDATE එකට එකතු කර දත්ත කාර්යක්ෂමව කළ හැක. මෙය නව පේළියක් නොමැතිනම් ඇතුළත් කර, පවතින පේළියක් තිබේ නම් යාවත්කාලීන කරන ක්‍රියාවලියක් එක SQL ප්‍රකාශයක් තුළ සිදු කරයි—මෙම කොටසෙහි ON DUPLICATE KEY UPDATE භාවිතය පිළිබඳ අවධානය යොමු කරමු.

ON DUPLICATE KEY UPDATE යනු කුමක්ද?

ON DUPLICATE KEY UPDATE යනු INSERT සහ UPDATE හැසිරීම එකට එක් කරන පහසු විශේෂාංගයකි. මෙම ව්‍යවස්ථාව භාවිතා කිරීමෙන්, ඇතුළත් කිරීම සහ යාවත්කාලීන කිරීම වැඩි කාර්යක්ෂම වේ.

The basic syntax is as follows.

INSERT INTO table_name (column1, column2, ...)
VALUES (value1, value2, ...)
ON DUPLICATE KEY UPDATE
column1 = new_value1, column2 = new_value2, ...;
  • INSERT part : නව දත්ත එක් කරයි.
  • ON DUPLICATE KEY UPDATE part : ඇතුළත් කිරීමේදී අද්විතීය යතුරු ගැටළුවක් හමු වුවහොත් දත්ත යාවත්කාලීන කරයි.

උදාහරණ

මූලික උදාහරණ

The following example inserts data into the users table and updates an existing user name if a duplicate key is found.

INSERT INTO users (id, name, email)
VALUES (1, 'Taro Yamada', 'taro@example.com')
ON DUPLICATE KEY UPDATE
name = 'Taro Yamada', email = 'taro@example.com';

මෙම ප්‍රකාශය පහත ක්‍රියාමාර්ග සිදු කරයි:

  1. id = 1 යන පේළියක් නොමැති නම්, නව රෙකෝඩ් එකක් ඇතුළත් කරයි.
  2. id = 1 යන පේළිය දැනටමත් තිබේ නම්, name සහ email යාවත්කාලීන කරයි.

Inventory Management Example

මෙම වාක්‍ය රචනය නිෂ්පාදන තොග ගණන යාවත්කාලීන කිරීම හෝ ඇතුළත් කිරීම සඳහාද ප්‍රයෝජනවත් වේ.

INSERT INTO inventory (product_id, stock)
VALUES (101, 50)
ON DUPLICATE KEY UPDATE
stock = stock + 50;

මෙම ප්‍රකාශය පහත සඳහන් කරයි:

  1. product_id = 101 යන නිෂ්පාදනය නොමැති නම්, නව රෙකෝඩ් එකක් ඇතුළත් කරයි.
  2. එය දැනටමත් තිබේ නම්, තොග ගණන (stock) වෙත 50 එකතු කරයි.

Key Points to Watch

1. A Unique Key Is Required

ON DUPLICATE KEY UPDATE යනු වගුවේ අද්විතීය යතුර (PRIMARY KEY හෝ UNIQUE index) එකක් නිර්වචනය කර ඇති විට පමණක් ක්‍රියා කරයි. අද්විතීය යතුරක් නොමැති නම්, දෝෂයක් සමඟ අසාර්ථක වේ.

2. AUTO_INCREMENT Still Increases

ON DUPLICATE KEY UPDATE භාවිතා කරන විට, අද්විතීය යතුරක් හඳුනාගත් පසුද AUTO_INCREMENT අගය වැඩි විය හැක. මෙය MySQL එකතු කිරීමේ උත්සාහ කිරීමේදී ගණකය ඉදිරියට ගෙන යන නිසා වේ.

INSERT INTO users (id, name)
VALUES (NULL, 'Hanako Suzuki')
ON DUPLICATE KEY UPDATE
name = 'Hanako Suzuki';

මෙම අවස්ථාවේ, අද්විතීය යතුරක් සිදුවූ පසුද AUTO_INCREMENT අගය වැඩි වේ.

3. Performance Impact

විශාල දත්ත ප්‍රමාණයක් සැලසීමේදී, ON DUPLICATE KEY UPDATE කාර්ය සාධනයට බලපෑමක් ඇති කළ හැක. නිතර ඇතුළත්/යාවත්කාලීන මෙහෙයුම් අවශ්‍ය නම්, කාර්යක්ෂමතාව වැඩි කිරීමට ගනුදෙනු (transactions) භාවිතා කිරීම ගැන සිතන්න.

Advanced Example

Consolidating Data Across Tables

ඔබට ON DUPLICATE KEY UPDATE භාවිතා කරමින් වෙනත් වගුවකින් දත්ත ඇතුළත් කළ හැක.

INSERT INTO users (id, name, email)
SELECT id, full_name, dept
FROM external_users
ON DUPLICATE KEY UPDATE
name = VALUES(name),
department = VALUES(department);

මෙම ප්‍රකාශය external_users වගුවෙන් users වගුවට දත්ත ඇතුළත් කරයි, සහ අද්විතීය යතුරු හමු වූ විට පවතින පේළි යාවත්කාලීන කරයි.

Summary

ON DUPLICATE KEY UPDATE MySQL හි කාර්යක්ෂම දත්ත කළමනාකරණයට ශක්තිමත් මෙවලමකි. එය භාවිතා කිරීමෙන්, ඔබට එක් SQL ප්‍රකාශයක් තුළ ඇතුළත් කිරීම සහ යාවත්කාලීන කිරීම සිදු කළ හැකි අතර, කේත සරලතාවය වැඩි කරයි සහ කාර්ය සාධනය වැඩි විය හැක. ඊළඟ කොටසේ, මෙම රටාව විශේෂයෙන් ප්‍රයෝජනවත් වන වැඩි විස්තරාත්මක සැබෑ-ලෝක උදාහරණ හඳුන්වා දෙනු ඇත.

5. Practical Examples: Learn Through Real-World Scenarios

මෙහිදී, INSERT ... ON DUPLICATE KEY UPDATE සහ මූලික INSERT/UPDATE ප්‍රකාශන සැබෑ-ලෝක අවස්ථා තුළ කෙසේ භාවිතා කරනදැයි පෙන්වන්නෙමු. මෙම උදාහරණ අධ්‍යයනය කිරීමෙන්, ඔබට නිෂ්පාදන වැඩකටයුතු වලට සෘජුවම යොදා ගත හැකි ප්‍රායෝගික කුසලතා ගොඩනැගිය හැක.

Scenario 1: Managing Product Inventory for an E-Commerce Site

ඉ-කොමර්ස් හි, නව නිෂ්පාදන එකතු කළ හැකි අතර, පවතින නිෂ්පාදන නැවත තොගයට පත් කළ හැක. මෙම අවස්ථාවල, ඉන්වෙන්ටරි ගණන කළමනාකරණයට කාර්යක්ෂම ක්‍රමයක් අවශ්‍ය වේ.

Example

පහත SQL ප්‍රකාශය නව නිෂ්පාදනයක් ඇතුළත් කරයි හෝ පවතින නිෂ්පාදනයේ තොග ගණන යාවත්කාලීන කරයි.

INSERT INTO inventory (product_id, product_name, stock)
VALUES (101, 'Laptop', 50)
ON DUPLICATE KEY UPDATE
stock = stock + 50;
  • විස්තරය :
  1. නිෂ්පාදන ID 101 සමඟ නිෂ්පාදනයක් නොමැති නම්, නව රෙකෝඩ් එකක් ඇතුළත් කරයි.
  2. ID 101 සමඟ නිෂ්පාදනය දැනටමත් තිබේ නම්, තොග ගණන (stock) වෙත 50 එකතු කරයි.

මෙය නිෂ්පාදන කළමනාකරණ ක්‍රියාපටිපාටිය තුළ ඉන්වෙන්ටරි කාර්යක්ෂමව යාවත්කාලීන කිරීමට ඉඩ සලසයි.

Scenario 2: User Registration and Updates

සාමාජිකත්ව-අධාරිත සේවාවල, නව පරිශීලකයන් ලියාපදිංචි විය හැකි අතර, පවතින පරිශීලකයන් තම පැතිකඩ යාවත්කාලීන කළ හැක. ඔබට මෙම දෙකම එක් SQL ප්‍රකාශයක් මඟින් කළ හැක.

Example

පහත SQL ප්‍රකාශය නව පරිශීලකයෙක් ඇතුළත් කරයි හෝ පවතින පරිශීලකයකුගේ නාමය සහ ඊමේල් යාවත්කාලීන කරයි.

INSERT INTO users (id, name, email)
VALUES (1, 'Ichiro Tanaka', 'tanaka@example.com')
ON DUPLICATE KEY UPDATE
name = 'Ichiro Tanaka',
email = 'tanaka@example.com';
  • විස්තරය :
  1. පරිශීලක ID 1 සමඟ රෙකෝඩ් එකක් නොමැති නම්, නව රෙකෝඩ් එකක් ඇතුළත් කරයි.
  2. පරිශීලක ID 1 සමඟ රෙකෝඩ් එකක් දැනටමත් පවතිනවා නම්, නාමය සහ ඊමේල් යාවත්කාලීන කරයි.

මෙම ක්‍රමය මධ්‍යස්ථ පරිශීලක දත්ත කළමනාකරණයට ප්‍රයෝජනවත් වේ.

දෘශ්‍යාවලිය 3: ලොග්ඉන් ඉතිහාසය යාවත්කාලීන කිරීම

වෙබ් යෙදුම් සාමාන්‍යයෙන් ලොග්ඉන් ඉතිහාසය සුරකිති. පවතින පරිශීලකයන් සඳහා අවසන් ලොග්ඉන් කාල සටහන යාවත්කාලීන කරන අතර නව පරිශීලක ඇතුළත් කිරීමක් ලියාපදිංචි කරන උදාහරණයක් බලමු.

උදාහරණය

INSERT INTO login_history (user_id, last_login)
VALUES (1, NOW())
ON DUPLICATE KEY UPDATE
last_login = NOW();
  • විස්තරය :
  1. user_id = 1 සමඟ රෙකෝඩ් එකක් නොමැති නම්, නව රෙකෝඩ් එකක් ඇතුළත් කරයි.
  2. පරිශීලකයා දැනටමත් පවතිනවා නම්, අවසන් ලොග්ඉන් කාල සටහන (last_login) වත්මන් වේලාවට (NOW()) යාවත්කාලීන කරයි.

මෙම SQL ප්‍රකාශය ලොග්ඉන් තොරතුරු කළමනාකරණයට කාර්යක්ෂම ක්‍රමයක් සපයයි.

දෘශ්‍යාවලිය 4: නියමිත නිෂ්පාදන මිල යාවත්කාලීන කිරීම්

ඔබට මිල නියමිතව යාවත්කාලීන කිරීමට අවශ්‍ය නම්, ON DUPLICATE KEY UPDATE ඔබට නව නිෂ්පාදන එක් කරමින් පවතින නිෂ්පාදන මිල එකම ක්‍රියාවලියෙන් යාවත්කාලීන කිරීමට ඉඩ සලසයි.

උදාහරණය

INSERT INTO products (product_id, product_name, price)
VALUES (201, 'Smartphone', 69900)
ON DUPLICATE KEY UPDATE
price = VALUES(price);
  • විස්තරය :
  1. product_id = 201 සමඟ නිෂ්පාදනයක් නොමැති නම්, නව නිෂ්පාදන රෙකෝඩ් එකක් ඇතුළත් කරයි.
  2. එය දැනටමත් පවතිනවා නම්, නිෂ්පාදන මිල (price) යාවත්කාලීන කරයි.

මෙය නිෂ්පාදන මිල වෙනස්කම් හසුරවීමට සරල ක්‍රමයකි.

දෘශ්‍යාවලිය 5: ආයාත කරන ලද දත්ත එකතු කිරීම සහ කළමනාකරණය

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

උදාහරණය

INSERT INTO employees (employee_id, name, department)
SELECT id, full_name, dept
FROM external_employees
ON DUPLICATE KEY UPDATE
name = VALUES(name),
department = VALUES(department);
  • විස්තරය :
  1. දත්ත external_employees වගුවෙන් තෝරාගෙන employees වගුවට ඇතුළත් කරයි.
  2. නකල්වීම් හඳුනාගත් විට, නාමය සහ දෙපාර්තමේන්තුවේ තොරතුරු යාවත්කාලීන කරයි.

මෙවැනි එකතු කිරීම පද්ධති අතර දත්ත ඒකාබද්ධ කිරීම සඳහා වැදගත් වේ.

සාරාංශය

මෙම දෘශ්‍යාවලියන් INSERT ... ON DUPLICATE KEY UPDATE භාවිතයෙන් දත්ත කාර්යක්ෂමව කළමනාකරණය කරන ආකාරය පෙන්වයි. මෙවැනි තත්ත්වයන් වාස්තුකාර්යවල සාමාන්‍යය වන බැවින්, මෙම උදාහරණ භාවිතා කර ඔබේ කාර්යයන්හි සුදුසු SQL ප්‍රකාශයන් යොදන්න.

6. වැදගත් සටහන් සහ හොඳ පුරුදු

MySQL හි INSERT, UPDATE, සහ ON DUPLICATE KEY UPDATE භාවිතා කරන විට, ප්‍රධාන අවධානම් තේරුම් ගැනීම සහ හොඳ පුරුදු අනුගමනය කිරීම කාර්ය සාධනය වැඩිදියුණු කරමින් ආරක්ෂිත, කාර්යක්ෂම දත්ත මෙහෙයුම් සලසයි. මෙම කොටසේ, වාස්තුකාර්ය භාවිතයට වැදගත් සැලකිලි සහ නිර්දේශිත ක්‍රියාමාර්ග ඉදිරිපත් කරමු.

වැදගත් සටහන්

1. WHERE කොටස සවිස්තරාත්මකව නිරවද්‍ය ලෙස සඳහන් කරන්න

  • ගැටලුව : UPDATE ප්‍රකාශයේ WHERE කොටස අත්හැරුවහොත්, වගුවේ සියලු පේළි යාවත්කාලීන විය හැක.
  • විසඳුම : WHERE කොටස තුළ සුදුසු කොන්දේසි නියම කර, බලපෑම් ලැබෙන පේළි සීමා කරන්න.
    UPDATE users
    SET email = 'updated@example.com'
    WHERE id = 1; -- Correct
    

2. අද්විතීය යතුරු නිවැරදිව නිර්වචනය කරන්න

  • ගැටලුව : ON DUPLICATE KEY UPDATE භාවිතා කරන විට අද්විතීය යතුර (PRIMARY KEY හෝ UNIQUE ඉන්ඩෙක්ස්) නොමැති නම්, දෝෂයක් සිදුවේ.
  • විසඳුම : නකල්වීම් අඩංගු නොවිය යුතු තීරුවල අද්විතීය යතුරු නිර්වචනය කරන්න.
    ALTER TABLE users ADD UNIQUE (email);
    

3. AUTO_INCREMENT හැසිරීම පිළිබඳ අවධානයෙන් සිටින්න

  • ගැටලුව : ON DUPLICATE KEY UPDATE භාවිතා කරන විට, නකල්වීමක් හඳුනාගත් පසුදත් AUTO_INCREMENT අගය වැඩි විය හැක.
  • විසඳුම : ඔබේ අද්විතීය යතුරු ව්‍යුහය කාරුණිකව සැලසුම් කරන්න, හෝ AUTO_INCREMENT හි හිස් ඉඩ ගැන සැලකිල්ලක් ඇත්නම් ID අගයන් පැහැදිලිව කළමනාකරණය කරන්න.

4. කාර්ය සාධන සැලකිලි

  • Problem : INSERT හෝ UPDATE සමඟ විශාල ප්‍රමාණයේ දත්ත සැකසීම දත්ත ගබඩා භාරය වැඩි කරයි සහ කාර්ය සාධනය මන්දගාමී කරයි.
  • Solutions :
  • ක්‍රියාකාරකම් කාර්යක්ෂමව කණ්ඩායම් කිරීම සඳහා ගනුදෙනු (transactions) භාවිතා කරන්න.
  • අවශ්‍ය වන විට බැච් සැකසීම (batch processing) ක්‍රියාත්මක කරන්න.

හොඳම ක්‍රියාමාර්ග

1. ගනුදෙනු (Transactions) භාවිතා කරන්න

දත්ත සමගිත්වය රැක ගැනීමට, ගනුදෙනුවක් තුළ බහු ක්‍රියාකාරකම් ක්‍රියාත්මක කිරීම නිර්දේශ කරයි.

START TRANSACTION;

INSERT INTO users (id, name) VALUES (1, 'Taro Yamada')
ON DUPLICATE KEY UPDATE name = 'Taro Yamada';

UPDATE inventory SET stock = stock - 1 WHERE product_id = 101;

COMMIT;
  • ගනුදෙනු (Transactions) දෝෂයක් සිදුවූ විට වෙනස්කම් පසුපසට (rollback) ගෙන යාමට ඉඩ සලසයි, එවිට දත්ත අඛණ්ඩතාවය සහතික වේ.

2. දර්ශක (Indexes) කාර්යක්ෂමව භාවිතා කරන්න

INSERT සහ UPDATE කාර්ය සාධනය වැඩිදියුණු කිරීමට, සුදුසු දර්ශක (indexes) නිර්වචනය කරන්න.

CREATE INDEX idx_user_email ON users (email);
  • දර්ශක (Indexes) දත්ත ලබා ගැනීම වේගවත් කරයි, නමුත් අධික දර්ශක භාවිතය INSERT සහ UPDATE ක්‍රියාකාරකම් මන්දගාමී කරයි—එය බුද්ධිමත් ලෙස භාවිතා කරන්න.

3. නිසි දෝෂ හසුරවීම (Error Handling) ක්‍රියාත්මක කරන්න

දෝෂ හසුරවීමේ තර්කය පැහැදිලිව නිර්වචනය කිරීම අනපේක්ෂිත හැසිරීම වැළැක්වීමට උපකාරී වේ.

DELIMITER //
CREATE PROCEDURE insert_user(IN user_id INT, IN user_name VARCHAR(255))
BEGIN
    DECLARE CONTINUE HANDLER FOR SQLEXCEPTION
    BEGIN
        ROLLBACK;
        SELECT 'An error occurred';
    END;
    START TRANSACTION;
    INSERT INTO users (id, name) VALUES (user_id, user_name)
    ON DUPLICATE KEY UPDATE name = user_name;
    COMMIT;
END;
//
DELIMITER ;

4. පෙරනිමි (Default) අගයන් සකසන්න

වගු නිර්මාණය කරන විට පෙරනිමි අගයන් නිර්වචනය කිරීම දෝෂ අඩු කරයි සහ INSERT ක්‍රියාකාරකම් අතර කුමන තීරුවල (columns) අතහැර දැමිය හැකිද යන්න පැහැදිලි කරයි.

CREATE TABLE users (
    id INT AUTO_INCREMENT PRIMARY KEY,
    name VARCHAR(255) NOT NULL,
    email VARCHAR(255),
    status VARCHAR(20) DEFAULT 'active'
);

5. විශාල දත්ත කට්ටල (Data Sets) සැලකිලිමත් ලෙස හසුරවන්න

විශාල ප්‍රමාණයේ දත්ත සැකසීමේදී, එක්වරට ඇතුළත් (insert) හෝ යාවත්කාලීන (update) කරන පේළි ගණන සීමා කර, ක්‍රියාකාරකම් කළහැකි බැච් (batches) වලට බෙදා ගන්න.

INSERT INTO large_table (col1, col2)
VALUES
  (1, 'value1'),
  (2, 'value2'),
  ...
  (1000, 'value1000'); -- Choose an appropriate batch size

පොදු වැරදි සහ විසඳුම්

  • Pitfall 1: අනුපිටපත් දත්ත අසමත් ලෙස හසුරවීම → Solution: අද්විතීය යතුරු (unique keys) සහ ON DUPLICATE KEY UPDATE නිසි ලෙස භාවිතා කරන්න.
  • Pitfall 2: වගු අගුළු (Table Locks) හේතුවෙන් කාර්ය සාධන අඩු වීම → Solution: දර්ශක (indexes) සහ ගනුදෙනු (transactions) භාවිතා කර සැකසුම් පරාසය සීමා කරන්න.
  • Pitfall 3: අවශ්‍ය නොවන තීරුවල (Columns) යාවත්කාලීන කිරීම → Solution: අවශ්‍ය තීරුවලට පමණක් යාවත්කාලීන කිරීමට සීමා කරන්න.

සාරාංශය

MySQL INSERT සහ UPDATE ප්‍රකාශන ආරක්ෂිතව සහ කාර්යක්ෂමව භාවිතා කිරීමට, ප්‍රධාන අවධානම් තේරුම් ගැනීම සහ හොඳම ක්‍රියාමාර්ග (best practices) අනුගමනය කිරීම අත්‍යවශ්‍ය වේ. ගනුදෙනු, දර්ශක, සහ දෝෂ හසුරවීම නිසි ලෙස භාවිතා කිරීමෙන්, දත්ත ගබඩා ක්‍රියාකාරකම් වල විශ්වාසනීයතාවය සහ කාර්ය සාධනය දෙකම වැඩිදියුණු කළ හැක.

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

මෙම කොටසේ, MySQL INSERT, UPDATE, සහ ON DUPLICATE KEY UPDATE සම්බන්ධ නිතර අසන ප්‍රශ්න (FAQ) වලට පිළිතුරු දෙනු ඇත. මෙම විස්තර පෙර කොටස්වලට අමතර කරමින්, සාමාන්‍ය වාස්තු විෂයයන්ට විසඳුම් ලබා දේ.

Q1: ON DUPLICATE KEY UPDATE භාවිතා කරන විට AUTO_INCREMENT අගය වැඩි වීමට හේතුව කුමක්ද?

Answer:
MySQL හි, INSERT ක්‍රියාකාරකමක් උත්සාහ කරන විට AUTO_INCREMENT අගය නියම කරයි. අනුපිටපත් යතුරක් (duplicate key) හඳුනාගත් පසු ක්‍රියාකාරකම යාවත්කාලීන (ON DUPLICATE KEY UPDATE) වෙත මාරු වුවත්, AUTO_INCREMENT ගණකය දැනටමත් ඉදිරියට ගොස් ඇත. මෙය MySQL හි නිර්මාණය වූ හැසිරීම이며, මඟ හැරුණු AUTO_INCREMENT අගයන් වැළැක්වීමට ක්‍රමයක් නොමැත.

Workaround:

  • ඔබට අනුමාන කළ හැකි ID අගයන් අවශ්‍ය නම්, AUTO_INCREMENT භාවිතා කිරීමේ වෙනුවට ID ගණනාවන් අතින් කළමනාකරණය කිරීම සලකා බලන්න.

Q2: ON DUPLICATE KEY UPDATE සහ REPLACE INTO අතර වෙනස කුමක්ද?

  • ON DUPLICATE KEY UPDATE : අනන්‍යකරණ ප්‍රතිලේඛනයක් හඳුනාගත් විට පවතින පේළිය යාවත්කාලීන කරයි. මුල් පේළිය නොනැසෙනු ඇත.
  • REPLACE INTO : අනන්‍යකරණ ප්‍රතිලේඛනයක් හඳුනාගත් විට පවතින පේළිය මකා දමා නව පේළියක් ඇතුළු කරයි. මෙය සම්බන්ධ විදේශ ප්‍රතිලේඛන හෝ ඉතිහාස දත්ත ඉවත් කළ හැක.

එකිනෙකා භාවිතා කළ යුත්තේ කවදාද:

  • ON DUPLICATE KEY UPDATE භාවිතා කරන්න දත්ත ඉතිහාසය සුරැකීමට අවශ්‍ය නම්.
  • REPLACE INTO භාවිතා කරන්න පැරණි දත්ත සම්පූර්ණයෙන්ම බිඳ වැටීමට අවශ්‍ය නම්.

Q3: INSERT භාවිතා කරමින් එකවර කිහිපයක් පේළි ඇතුළු කරන්නේ කෙසේද?

පිළිතුර:
එක INSERT ප්‍රකාශනයක VALUES කොටස භාවිතා කරමින් එකවර කිහිපයක් පේළි ඇතුළු කළ හැක.

INSERT INTO users (name, email)
VALUES 
  ('Taro Yamada', 'taro@example.com'),
  ('Hanako Sato', 'hanako@example.com'),
  ('Jiro Suzuki', 'jiro@example.com');

මෙම ප්‍රවේශය එකින් එක පේළි ඇතුළු කිරීමට වඩා කාර්යක්ෂම ය.

Q4: WHERE කොටසක කිහිපයක් තත්ත්වයන් විශේෂ කරන්නේ කෙසේද?

පිළිතුර:
කිහිපයක් තත්ත්වයන් ඒකාබද්ධ කිරීමට AND හෝ OR ක්‍රියාකාරක භාවිතා කරන්න.

UPDATE users
SET status = 'inactive'
WHERE last_login < '2024-01-01' AND status = 'active';
  • AND : දෙකම තත්ත්වයන් සත්‍ය වන විට යෙදෙනු ඇත.
  • OR : එක තත්ත්වයක් හෝ දෙකම සත්‍ය වන විට යෙදෙනු ඇත.

Q5: කවදා ව්‍යාපාර භාවිතා කළ යුත්තේ?

පිළිතුර:
දත්ත ස්ථිරභාවය තීරණාත්මක වන විට ව්‍යාපාර භාවිතා කරන්න, උදාහරණයක් ලෙස:

  1. කිහිපයක් දත්තගබඩා මෙහෙයුම් එකට සාර්ථක විය යුතු වන විට :
    START TRANSACTION;
    INSERT INTO orders (order_id, user_id) VALUES (1, 123);
    UPDATE inventory SET stock = stock - 1 WHERE product_id = 101;
    COMMIT;
    
  1. අභූත තත්ත්වයක් සිදුවුවහොත් වෙනස්කම් ආපසු ගෙන ඒමට අවශ්‍ය වන විට : ව්‍යාපාර ඉවත් කිරීමට ඉඩ සලසා අසාර්ථකත්වයේදී මුල් තත්ත්වයට ප්‍රතිස්ථාපනය කිරීමට ඉඩ සලසයි.

Q6: විශාල INSERT හෝ UPDATE මෙහෙයුම් කාර්යක්ෂමව කළමනාකරණය කරන්නේ කෙසේද?

පිළිතුර:
පහත උපාය මාර්ග සලකා බලන්න:

  • බහු මෙහෙයුම් : එකවර කිහිපයක් පේළි ඇතුළු කරන්න.
    INSERT INTO users (name, email)
    VALUES 
      ('Ichiro Tanaka', 'ichiro@example.com'),
      ('Hanako Sato', 'hanako@example.com');
    
  • ** සුචිකරණ භාවිතා කරන්න** : නිවැරදි සුචිකරණ සෙවීම් සහ යාවත්කාලීන කිරීමේ වේගය වැඩි දියුණු කරයි.
  • ප්‍රතිකාරණය බෙදන්න : සියල්ල එකවර කිරීම වෙනුවට කුඩා බෙදුම්වල මෙහෙයුම් ක්‍රියාත්මක කරන්න.
    UPDATE inventory
    SET stock = stock - 1
    WHERE product_id BETWEEN 100 AND 200;
    

Q7: මූලික වටිනාකම් භාවිතා කිරීමේ වාසි මොනවාද?

පිළිතුර:
මූලික වටිනාකම් නිර්වචනය කිරීමෙන් INSERT ප්‍රකාශනවල නොපෙන්වන පේළි ස්ථිර වශයෙන් නිශ්චිත වටිනාකම් ප්‍රමාණවත් කරනු ලැබේ. මෙය කේත සරල කරන අතර දෝෂ වැළැක්වීමට උපකාරී වේ.

CREATE TABLE users (
    id INT AUTO_INCREMENT PRIMARY KEY,
    name VARCHAR(255) NOT NULL,
    email VARCHAR(255),
    status VARCHAR(20) DEFAULT 'active'
);

INSERT INTO users (name)
VALUES ('Taro Yamada'); -- status is automatically set to 'active'

සාරාංශය

මෙම FAQ කොටස සාමාන්‍ය ප්‍රායෝගික ප්‍රශ්න විසඳීමට උපකාරී විය. මෙම තීක්ෂ්ණ බුද්ධිය යෙදීමෙන්, ඔබට MySQL INSERT සහ UPDATE ප්‍රකාශන සත්‍ය ලෝක තත්ත්වයන්හි වඩාත් නිවැරදිව සහ කාර්යක්ෂමව භාවිතා කළ හැක.

8. නිගමනය

මෙම ලිපියෙහි, MySQL INSERT සහ UPDATE ප්‍රකාශනවල මූලික මෙහෙයුම්, දත්ත කාර්යක්ෂමව කළමනාකරණය සඳහා උසස් තාක්ෂණයන් පිළිබඳ විස්තරාත්මකව පැහැදිලි කෙරිණි. ආරම්භකයින් සිට මධ්‍යම මට්ටමේ පරිශීලකයින් සඳහා සකස් කර ඇති මෙම මාර්ගෝපදේශය සත්‍ය ලෝක තත්ත්වයන්හි සෘජුවම යෙදිය හැකි ප්‍රායෝගික දැනුම සහ හොඳම පිළිවෙත් ආවරණය කරයි.

ප්‍රධාන ඉගෙනීම්

  1. INSERT සහ UPDATE හි මූලික ව්‍යාකරණය
  • INSERT භාවිතා කරමින් නව දත්ත ඇතුළු කිරීම සහ UPDATE භාවිතා කරමින් පවතින දත්ත වෙනස් කිරීම ඉගෙන ගත් අපි.
  • WHERE කොටසේ නිවැරදි භාවිතය සහ කිහිපයක් පේළි කළමනාකරණය වැනි වැදගත් සලකා බැලීම් පැහැදිලි කෙරිණි.
  1. ON DUPLICATE KEY UPDATE භාවිතය
  • එක SQL ප්‍රකාශනයකින් නව දත්ත ඇතුළු කිරීම හෝ පවතින දත්ත යාවත්කාලීන කිරීම සඳහා කාර්යක්ෂම තාක්ෂණයක් ලෙස ON DUPLICATE KEY UPDATE හඳුන්වා දුන් අපි.
  • ඉන්වෙන්ටරි කළමනාකරණය සහ ලොගින් ඉතිහාස යාවත්කාලීන කිරීම් වැනි උදාහරණ හරහා, එය සත්‍ය ලෝක මෙහෙයුම්වල යෙදිය හැකි ආකාරය පෙන්වා දුන් අපි.
  1. ප්‍රායෝගික භාවිත මූලාශ්‍ර
  • අපි e‑commerce ඉන්වෙන්ටරි කළමනාකරණය සහ පරිශීලක තොරතුරු යාවත්කාලීන කිරීම වැනි සැබෑ අවස්ථා මත SQL උදාහරණ ඉදිරිපත් කළෙමු.
  • මෙම උදාහරණය සංකල්පයන් ප්‍රායෝගික ව්‍යාපාරික වැඩපිළිවෙළ තුළ කාර්යක්ෂමව යෙදවීමට කෙසේදැයි පෙන්වයි.
  1. වැදගත් සටහන් සහ හොඳ පුරුදු
  • WHERE වාක්‍යය නිවැරදිව භාවිත කිරීම, ගනුදෙනු සමඟ දත්ත අඛණ්ඩතාවය සහතික කිරීම, සහ ඉන්ඩෙක්ස් භාවිතයෙන් ක්‍රියාකාරකම් කාර්යක්ෂම හා ආරක්ෂිත ලෙස සිදු කරන ආකාරය අපි පැහැදිලි කළෙමු.
  1. ගැඹුරු අවබෝධය සඳහා FAQ
  • සාමාන්‍ය ප්‍රශ්නවලට පිළිතුරු දීමෙන්, ප්‍රායෝගික ගැටළු පැහැදිලි කරමින්, සැබෑ ලෝක භාවිතය සඳහා අවබෝධය ගැඹුරු කර ගැනීමට අපි උදව් කළෙමු.

ඔබ මෙම ලිපියෙන් ලබාගන්නා වටිනාකම

MySQL INSERT, UPDATE, සහ ON DUPLICATE KEY UPDATE නිවැරදිව අවබෝධ කර යෙදවීමෙන්, ඔබට පහත ලාභ ලබාගත හැක:

  • දත්ත ගබඩා කාර්යක්ෂමතාවය වැඩිවීම : කෙටි SQL ප්‍රකාශන භාවිතයෙන් insert සහ update ක්‍රියාකාරකම් එකට එකතු කරන්න.
  • දෝෂ වැළැක්වීම : නිවැරදි WHERE වාක්‍ය සහ ගනුදෙනු භාවිතයෙන් ආරක්ෂිත ක්‍රියාකාරකම් සිදු කරන්න.
  • බලවත් ප්‍රායෝගික කුසලතා : සැබෑ උදාහරණ ඔබේ ව්‍යාපෘති වලට සෘජුව යෙදවන්න.

ඊළඟ පියවර

මෙම ලිපිය යොමු කරගනිමින් ඔබේ ව්‍යාපෘති වල INSERT සහ UPDATE ප්‍රකාශන යෙදවීමට ආරම්භ කරන්න. ඔබේ කුසලතා තවත් වැඩිදියුණු කිරීමට අවශ්‍ය නම්, පහත විෂයයන් ඉගෙන ගැනීමට සලකා බලන්න:

  • MySQL කාර්ය සාධන සුසංයෝජනය
  • සංකීර්ණ විමසුම් (උපවිමසුම් සහ JOIN) ගොඩනැගීම
  • MySQL හි ට්‍රිගර් සහ ගබඩා කළ පරිපාලන ක්‍රම (stored procedures) භාවිතය

අපි බලාපොරොත්තු වෙමු මෙම මාර්ගෝපදේශය ඔබේ MySQL දත්ත සැකසීමේ කුසලතා ශක්තිමත් කර ඔබේ ව්‍යාපෘති වල නිෂ්පාදනශීලතාව වැඩිදියුණු කරනු ඇතැයි. ඔබේ දත්ත ගබඩා දැනුම දිගටම විස්තාර කර, සංවර්ධන කාර්යයන්හි ප්‍රායෝගිකව යෙදවන්න!