MySQL INSERT vs UPDATE: වක්‍රරචනය, උදාහරණ, ON DUPLICATE KEY UPDATE, සහ REPLACE

目次

1. හැඳින්වීම

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

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

2. INSERT මූලික කරුණු

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

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

INSERT INTO table_name (column1, column2, ...)
VALUES (value1, value2, ...);

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

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

මෙම SQL, “Taro Yamada”, “taro@example.com”, සහ “30” යන අගයන් users වගුවේ name, email, සහ age තීරුවලට අනුව එක් කරයි.

බහු පේළි එක් කිරීම

MySQL හි, ඔබට එක්වරම බහු පේළි දත්ත එක් කළ හැක. එවැනි අවස්ථාවක, ව්‍යවස්ථාව මෙසේ පෙනේ.

INSERT INTO users (name, email, age)
VALUES
('Hanako Sato', 'hanako@example.com', 25),
('Ichiro Suzuki', 'ichiro@example.com', 40);

මෙම ක්‍රමය භාවිතා කිරීමෙන් දත්ත ගබඩා ප්‍රවේශ ගණන අඩු කර, කාර්ය සාධනය වැඩි කළ හැක.

NULL අගයන් සැකසීම

INSERT ප්‍රකාශයක් භාවිතා කරන විට, ඔබට NULL අගයන් සැකසීමට අවශ්‍ය විය හැක. උදාහරණයක් ලෙස, age සකස් නොකළ නම්, මෙසේ ලියන්න.

INSERT INTO users (name, email, age)
VALUES ('Jiro Tanaka', 'jiro@example.com', NULL);

NOT NULL සීමාවක් තීරුවකට තිබේ නම්, NULL අගයක් එක් කිරීම දෝෂයක් ඇති කරයි. එවැනි අවස්ථාවක, ඔබට පෙරනිමි අගයක් සකස් කළ යුතුය හෝ අගයක් පැහැදිලිව නියම කළ යුතුය.

3. UPDATE මූලික කරුණු

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

UPDATE ප්‍රකාශය පවතින ලේඛනවල දත්ත වෙනස් කිරීමට භාවිතා වේ. මෙම කොටසේ, මූලික ව්‍යවස්ථාව, කොන්දේසි සමඟ යාවත්කාලීන කිරීම, සහ WHERE වාක්‍යය ඇයි වැදගත්ද යන්න පැහැදිලි කරමු.

UPDATE table_name
SET column1 = new_value1, column2 = new_value2
WHERE condition;

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

UPDATE users
SET age = 35
WHERE name = 'Taro Yamada';

මෙම SQL, users වගුවේ නාමය “Taro Yamada” වන පරිශීලකයාගේ වයස 35 ලෙස යාවත්කාලීන කරයි.

WHERE වාක්‍යය වැදගත් වන්නේ ඇයි

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

-- When the WHERE clause is omitted
UPDATE users
SET age = 30;

මෙම SQL, සියලු පරිශීලකයන්ගේ වයස 30 ලෙස සකසයි.

කොන්දේසිමය යාවත්කාලීන

බහු කොන්දේසි නියම කරන විට, AND හෝ OR භාවිතා කරන්න.

UPDATE users
SET age = 28
WHERE name = 'Hanako Sato' AND email = 'hanako@example.com';

මෙම ආකාරයෙන්, ඔබට තවත් නිරවද්‍ය කොන්දේසි සමඟ දත්ත යාවත්කාලීන කළ හැක.

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

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

INSERT … ON DUPLICATE KEY UPDATE භාවිතා කිරීමේ ක්‍රමය

INSERT ... ON DUPLICATE KEY UPDATE ප්‍රාථමික යතුර හෝ අද්විතීය යතුරු සීමා තිබේ නම් ප්‍රයෝජනවත් වේ. මෙම ව්‍යවස්ථාව සමඟ, “ඇත්නම් යාවත්කාලීන, නැතිනම් එක් කිරීම” එකම SQL ප්‍රකාශයක් තුළ සිදු කළ හැක.

ව්‍යවස්ථාව

INSERT INTO table_name (column1, column2, ...)
VALUES (value1, value2, ...)
ON DUPLICATE KEY UPDATE
column1 = new_value1, column2 = new_value2, ...;

උදාහරණය

users වගුවට නව පරිශීලකයෙකු එකතු කිරීම සලකා බලන්න. එකම email එකක් දැනටමත් පවතිනවා නම්, එම පරිීලකයාගේ name සහ age යාවත්කාලීන කරන්න.

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

මෙම SQL ප්‍රකාශය මෙය කරයි:

  1. email = 'taro@example.com' සමග වාර්තාවක් නොමැති නම්, දත්ත ඇතුළත් කරන්න.
  2. පවතින වාර්තාවක් තිබේ නම්, name සහ age යාවත්කාලීන කරන්න.

සටහන්

  • AUTO_INCREMENT වර්ගයේ පිටුවක් තිබේ නම්, ආදර්ශනය සිදුවන විට පවා ගණන්කරණය වැඩි වේ. මෙය අනපේක්ෂිත හැසිරීම් ඇති කළ හැකි බැවින්, සැලකිලිමත් වන්න.
  • VALUES() ශ්‍රියය භාවිතා කිරීමෙන්, ඔබ ඇතුළත් කිරීමට උත්සාහ කළ වටිනාකම් යාවත්කාලීන කිරීම සඳහා නැවත භාවිතා කළ හැක.

REPLACE ක්‍රියාකාරීත්වය සහ එහි වෙනස

REPLACE ප්‍රකාශය (ආදර්ශනයක් සොයාගත් විට) පවතින දත්ත සම්පූර්ණයෙන්ම මකා හරිනවා සහ පසුව නව දත්ත ඇතුළත් කරයි. INSERT ... ON DUPLICATE KEY UPDATE වලට වඩා, මුල් වාර්තාව මකා හරිනවා.

ව්‍යාකරණය

REPLACE INTO table_name (column1, column2, ...)
VALUES (value1, value2, ...);

උදාහරණය

users වගුවට දත්ත ඇතුළත් කරන්න, සහ email ආදර්ශනය වූවහොත්, පවතින දත්ත මකා හරිනවා සහ නව දත්ත ඇතුළත් කරන්න.

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

මෙම SQL ප්‍රකාශය මෙය කරයි:

  1. email = 'taro@example.com' සමග වාර්තාවක් තිබේ නම්, එම වාර්තාව මකන්න.
  2. නව දත්ත ඇතුළත් කරන්න.

සටහන්

  • එය මකා හරිනවා + ඇතුළත් කිරීම සිදු කරන බැවින්, එය ට්‍රිගර් සහ විදේශ යතුර සීමාවන්ට බලපෑම් කළ හැක.
  • මකා හරිනවා වලින් ඇති වන පැති බලපෑම් (උදාහරණයක් ලෙස, සම්බන්ධ දත්ත නැති වීම) ගැන සැලකිලිමත් වන්න.

කාර්ය සාධන සලකා බැලීම

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

CharacteristicINSERT … ON DUPLICATE KEY UPDATEREPLACE
Process flowInsert or updateDelete + insert
PerformanceGenerally fasterSlightly slower due to delete + insert
Impact on foreign keys and triggersLess impact because it updates onlyAffected during deletion
Data integrity riskLowerHigher risk during deletion

නිවැරදි භාවිතය තෝරා ගැනීම

  • INSERT … ON DUPLICATE KEY UPDATE සුදුසු වන විට
  • විදේශ යතුර සීමාවන් හෝ ට්‍රිගර් තිබේ නම් සහ ඔබ මකා හරිනවා වළක්වා ගැනීමට අවශ්‍ය වන විට.
  • යාවත්කාලීන කිරීම් නිතර සිදු වන විට.
  • REPLACE සුදුසු වන විට
  • දත්ත සම්පූර්ණ ආදේශයක් අවශ්‍ය වන විට.
  • විදේශ යතුර සීමාවන් හෝ ට්‍රිගර් වලින් බලපෑම් නොලැබෙන සරල වගු සඳහා.

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

මෙහිදී, අපි MySQL INSERT සහ UPDATE සඳහා සැබෑ ලෝක භාවිතයන් හඳුන්වා දෙමු, එසේම “INSERT … ON DUPLICATE KEY UPDATE” සහ “REPLACE” හි ප්‍රායෝගික භාවිතයන්. මෙය ඔබ ඉගෙන ගත් දේ සැබෑ වැඩකට යෙදීමට ඔබට උපකාරී වේ.

භාවිතය 1: ඉන්වෙන්ටරි කළමනාකරණ පද්ධතිය

ඉන්වෙන්ටරි කළමනාකරණ පද්ධතියක, නිෂ්පාදන ලියාපදිංචි කිරීම සහ මොනඩ යාවත්කාලීන කිරීම නිතර සිදු වේ. නව නිෂ්පාදන එකතු කිරීමට INSERT භාවිතා කරන්න, සහ පවතින නිෂ්පාදන යාවත්කාලීන කිරීමට UPDATE හෝ “INSERT … ON DUPLICATE KEY UPDATE” භාවිතා කරන්න.

නිෂ්පාදන දත්ත ඇතුළත් කිරීම සහ යාවත්කාලීන කිරීම

උදාහරණයක් ලෙස, නිෂ්පාදන වගුව products පහත පරිදි ව්‍යුහගත වී ඇති බව සිතන්න.

ColumnData TypeDescription
product_idINTProduct ID (primary key)
nameVARCHAR(255)Product name
stockINTStock quantity
නව නිෂ්පාදනයක් ලියාපදිංචි කිරීම
INSERT INTO products (product_id, name, stock)
VALUES (1, 'Laptop', 50);
මොනඩ ප්‍රමාණය යාවත්කාලීන කිරීම (පවතින නිෂ්පාදනය)
UPDATE products
SET stock = stock + 20
WHERE product_id = 1;
නව එකක් ඇතුළත් කරන්න හෝ මොනඩ ප්‍රමාණය යාවත්කාලීන කරන්න

ඔබට නව නිෂ්පාදනයක් ලියාපදිංචි කිරීමට හෝ පවතින නිෂ්පාදනයක මොනඩ යාවත්කාලීන කිරීමට අවශ්‍ය නම්, “INSERT … ON DUPLICATE KEY UPDATE” භාවිතා කරන්න.

INSERT INTO products (product_id, name, stock)
VALUES (1, 'Laptop', 50)
ON DUPLICATE KEY UPDATE
stock = stock + 50;

මෙම SQL පහත කරන දේ සිදු කරයි:

  • නිෂ්පාදන ID 1 සඳහා දත්ත නොමැති නම්, එය ඇතුළත් කරන්න.
  • නිෂ්පාදන ID 1 සඳහා දත්ත තිබේ නම්, මොනඩ ප්‍රමාණයට 50 එකතු කරන්න.

භාවිතය 2: පරිශීලක තොරතුරු කළමනාකරණය

වෙබ් යෙදුම්වල, පරිශීලක ලියාපදිංචි කිරීම සහ යාවත්කාලීන කිරීම සාමාන්‍යකරණයකි. නව පරිශීලකයින් ලියාපදිංචි කිරීමට INSERT භාවිතා කරන්න, සහ පවතින පරිශීලක තොරතුරු යාවත්කාලීන කිරීමට UPDATE හෝ “INSERT … ON DUPLICATE KEY UPDATE” භාවිතා කරන්න.

පරිශීලක වගු ව්‍යුහය

ColumnData TypeDescription
user_idINTUser ID (primary key)
nameVARCHAR(255)User name
emailVARCHAR(255)Email address
last_loginDATETIMELast login timestamp
නව පරිශීලකයෙකු ලියාපදිංචි කිරීම
INSERT INTO users (user_id, name, email, last_login)
VALUES (1, 'Taro Yamada', 'taro@example.com', NOW());
පරිශීලක තොරතුරු යාවත්කාලීන කිරීම

උදාහරණයක් ලෙස, පරිශීලකයෙකු තම පැතිකඩ වෙනස් කරන විට.

UPDATE users
SET name = 'Hanako Yamada', email = 'hanako@example.com'
WHERE user_id = 1;
තොරතුරු ලියාපදිංචි කිරීම හෝ යාවත්කාලීන කිරීම

පරිශීලකයෙකු පළමු වරට ලොග් ඉන් වුන විට, ඔවුන්ව ලියාපදිංචි කරන්න; පරිශීලකයා දැනටමත් පවතිනවා නම්, අවසන් ලොග් ඉන් කාල සටහන යාවත්කාලීන කරන්න.

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

භාවිත නඩුව 3: පරතර දත්ත යාවත්කාලීන කිරීම්

සෙන්සර් හෝ ලොග් දත්ත සමඟ කටයුතු කරන විට, නව දත්ත මිනිත්තුවකට හෝ තත්පරයකට එක් කළ හැක. මෙම අවස්ථාවේ, ඔබ INSERT භාවිතයෙන් නව දත්ත ඇතුළත් කරයි හෝ පවතින දත්ත තත්ත්වය අනුව යාවත්කාලීන කරයි.

ලොග් දත්ත ඇතුළත් කිරීම

sensor_logs නමැති උදාහරණ වගුවක් සෙන්සර් දත්ත රෙකෝඩ් කිරීම සඳහා මෙහි ඇත.

ColumnData TypeDescription
sensor_idINTSensor ID (primary key)
temperatureFLOATTemperature
last_updatedDATETIMELast updated timestamp
නව සෙන්සර් දත්ත රෙකෝඩ් කිරීම
INSERT INTO sensor_logs (sensor_id, temperature, last_updated)
VALUES (1, 25.5, NOW());
දත්ත යාවත්කාලීන කිරීම හෝ ඇතුළත් කිරීම

සෙන්සර් ID දැනටමත් පවතිනවා නම්, දත්ත යාවත්කාලීන කරන්න; නැතිනම්, එය ඇතුළත් කරන්න.

INSERT INTO sensor_logs (sensor_id, temperature, last_updated)
VALUES (1, 25.5, NOW())
ON DUPLICATE KEY UPDATE
temperature = VALUES(temperature),
last_updated = VALUES(last_updated);

සටහන් සහ හොඳ පුරුදු

  1. දෝෂ හසුරුවීම: ON DUPLICATE KEY UPDATE හෝ REPLACE භාවිතා කරන විට, ට්‍රිගර් සහ විදේශීය යතුරු සීමා (foreign key constraints) වල බලපෑම පෙර පරීක්ෂා කිරීම වැදගත් වේ.
  2. කාර්ය සාධන සුදානම: විශාල පරිමාණ දත්ත සඳහා, දක්ෂ ලෙස ක්‍රියා කිරීමට ඉන්ඩෙක්ස් සැලසුම් සහ ගනුදෙනු (transactions) භාවිතා කරන්න.
  3. දත්ත අඛණ්ඩතාව: විශේෂයෙන් REPLACE සමඟ, මකා දැමීම + ඇතුළත් කිරීම සිදුවේ, එබැවින් සම්බන්ධිත දත්ත අහිමි වීමේ අවදානම වැළැක්වීමට ක්‍රියාමාර්ග ගත යුතුය.

6. පොදු දෝෂ සහ ඒවා සකස් කිරීමේ ක්‍රම

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

පොදු දෝෂ උදාහරණ

1. අනුපිටපත් ඇතුළත් කිරීමේ දෝෂ

දෝෂ පණිවුඩය:

Error: Duplicate entry '1' for key 'PRIMARY'

හේතුව:

  • මෙය ඔබ ප්‍රාථමික යතුර (primary key) හෝ අද්විතීය සීමාව (UNIQUE) ඇති තීරුවකට දැනටමත් පවතින අගයක් ඇතුළත් කිරීමට උත්සාහ කරන විට සිදුවේ.

කෙසේ සකස් කරන්නේ:

  • ON DUPLICATE KEY UPDATE භාවිතා කරන්න: අනුපිටපත් ඇතුළත් කිරීමක් පවතින විට යාවත්කාලීන කිරීමක් සිදු කරන්න.
    INSERT INTO users (user_id, name, email)
    VALUES (1, 'Taro Yamada', 'taro@example.com')
    ON DUPLICATE KEY UPDATE
    name = VALUES(name),
    email = VALUES(email);
    
  • ඇතුළත් කිරීමට පෙර පවතින බව පරීක්ෂා කරන්න: අනුපිටපත් වැළැක්වීමට, දත්ත දැනටමත් පවතිනවාදැයි පෙර පරීක්ෂා කරන්න.
    SELECT COUNT(*) FROM users WHERE user_id = 1;
    

2. විදේශීය යතුරු සීමා (Foreign Key Constraint) දෝෂ

දෝෂ පණිවුඩය:

Error: Cannot add or update a child row: a foreign key constraint fails

හේතුව:

  • මෙය විදේශීය යතුරු සීමාව (FOREIGN KEY) නිසා, යොමු කරන පියාඹු වගුවේ දත්ත නොපවතින විට සිදුවේ.

කෙසේ සකස් කරන්නේ:

  • සම්බන්ධිත දත්ත පියාඹු වගුවට ඇතුළත් කරන්න.
    INSERT INTO parent_table (id, name) VALUES (1, 'Parent data');
    
  • විදේශීය යතුරු සීමා තාවකාලිකව අක්‍රිය කරන්න (නිර්දේශ නොකෙරේ).
    SET FOREIGN_KEY_CHECKS = 0;
    -- Data operations
    SET FOREIGN_KEY_CHECKS = 1;
    

3. NULL-සම්බන්ධ දෝෂ

දෝෂ පණිවුඩය:

Error: Column 'name' cannot be null

හේතුව:

  • තීරුවට NOT NULL සීමාවක් තිබුණද, NULL අගයක් ඇතුළත් කිරීමට උත්සාහ කරන විට මෙය සිදුවේ.

කෙසේ සකස් කරන්නේ:

  • පෙරනිමි අගයක් සකසන්න.
    ALTER TABLE users MODIFY name VARCHAR(255) NOT NULL DEFAULT 'Unspecified';
    
  • INSERT භාවිතයෙන් සුදුසු අගයක් ඇතුළත් කරන්න.
    INSERT INTO users (name, email, age)
    VALUES ('Taro Yamada', 'taro@example.com', NULL);
    

4. දත්ත වර්ග (Data Type) දෝෂ

දෝෂ පණිවුඩය:

Error: Data truncated for column 'age' at row 1

හේතුව:

  • මෙය ඔබ තීරුවේ දත්ත වර්ගයට නොගැලපෙන අගයක් ඇතුළත් කිරීමට හෝ යාවත්කාලීන කිරීමට උත්සාහ කරන විට සිදුවේ.

කොහොමද සකස් කරන්න:

  • දත්ත වර්ගය පරීක්ෂා කර, සුදුසු අගයක් භාවිතා කරන්න.
    INSERT INTO users (age) VALUES (30); -- For an INT column
    
  • තීරුවේ දත්ත වර්ගය වෙනස් කරන්න (අවශ්‍ය නම්).
    ALTER TABLE users MODIFY age VARCHAR(10);
    

5. වගුව ලොක්-සම්බන්ධ දෝෂය

දෝෂ පණිවිඩය:

Error: Lock wait timeout exceeded; try restarting transaction

කාරණය:

  • මෙය වෙනත් ගනුදෙනුවක් වගුව ලොක් කර ඇති අතර, ලොක් එක නියමිත කාලයක් තුළ මුදා නොදෙන විට සිදුවේ.

කොහොමද සකස් කරන්න:

  • ගනුදෙනු ගැටුම වැළැක්වීමට, පහත ක්‍රියාමාර්ග සලකා බලන්න:
  • වගුව ලොක් කිරීම අඩු කිරීම සඳහා විමසුම් වෙන් කරන්න.
  • විමසුම් ක්‍රියාත්මක කිරීම වේගවත් කිරීම සඳහා සුදුසු දර්ශක (indexes) සාදන්න.

කාර්ය සාධනය සහ දෝෂ වැළැක්වීම සඳහා හොඳ පුරුදු

  1. ගනුදෙනු කළමනාකරණය භාවිතා කරන්න
  • බහු INSERT සහ UPDATE ක්‍රියාකාරකම් සිදු කරන විට, ක්‍රියාකාරකම් විශ්වාසදායකව කළමනාකරණය කිරීම සඳහා ගනුදෙනු භාවිතා කරන්න.
    START TRANSACTION;
    INSERT INTO orders (order_id, user_id) VALUES (1, 1);
    UPDATE users SET last_order = NOW() WHERE user_id = 1;
    COMMIT;
    
  1. දර්ශක (indexes) සුදානම් කරන්න
  • ප්‍රාථමික යතුරු සහ විදේශ යතුරු මත සුදුසු දර්ශක සකස් කිරීම දෝෂ අවදානම අඩු කර, කාර්ය සාධනය වැඩි කරයි.
    ALTER TABLE users ADD INDEX (email);
    
  1. දෝෂ සිදුවීමේදී රෝල්බැක් කරන්න
  • දෝෂයක් සිදුවූ විට, දත්ත අඛණ්ඩතාව රැක ගැනීමට රෝල්බැක් ක්‍රියාත්මක කරන්න.
    START TRANSACTION;
    -- Some operations
    ROLLBACK; -- On error
    

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

MySQL INSERT සහ UPDATE ප්‍රකාශන භාවිතා කරන විට, බොහෝ ජනතාවට සමාන ප්‍රශ්න ඇති වේ. මෙම කොටසේ, සාමාන්‍ය ප්‍රශ්න සහ පිළිතුරු මගින් අවබෝධය ගැඹුරු කරමු.

ප්‍රශ්න 1: INSERT නා UPDATE, කුමන එක භාවිතා කළ යුතුද?

පිළිතුර:

නව දත්ත එක් කිරීමට INSERT භාවිතා කරන්න, සහ පවතින දත්ත වෙනස් කිරීමට UPDATE භාවිතා කරන්න. නමුත් නව දත්ත එක් කිරීම සහ පවතින දත්ත යාවත්කාලීන කිරීම එකට සිදු කරන විට, “INSERT … ON DUPLICATE KEY UPDATE” භාවිතා කිරීම හොඳම විකල්පය වේ.

උදාහරණය:

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

මෙම වාක්‍ය රීතිය එකම විමසුමක නව දත්ත ඇතුළත් කිරීම සහ පවතින දත්ත යාවත්කාලීන කිරීම කළ හැක.

ප්‍රශ්න 2: ON DUPLICATE KEY UPDATE සියලුම අවස්ථා සඳහා භාවිතා කළ හැදියිද?

පිළිතුර:

නැත. ON DUPLICATE KEY UPDATE සඳහා පහත සීමා පවතී:

  1. ප්‍රාථමික යතුරක් හෝ අද්විතීය යතුරක් නිර්වචනය කර ඇති විට පමණක් ක්‍රියා කරයි. එවැනි යතුරක් නොමැති නම්, දෝෂයක් නොපැමිණියත්, අපේක්ෂිත ලෙස ක්‍රියා නොකරයි.
  2. විශාල පරිමාණ යාවත්කාලීන සඳහා, කාර්ය සාධනය අඩුවිය හැක. එවැනි අවස්ථාවල, ගනුදෙනු භාවිතා කිරීම හෝ දත්ත වෙන් කිරීම සලකා බලන්න.

ප්‍රශ්න 3: REPLACE සහ ON DUPLICATE KEY UPDATE අතර වෙනස කුමක්ද?

පිළිතුර:

ඔවුන් සමාන වුවද, ඔවුන්ගේ හැසිරීම වැදගත් ලෙස වෙනස් වේ.

CharacteristicON DUPLICATE KEY UPDATEREPLACE
Main behaviorUpdate data when a duplicate key occursDelete + insert when a duplicate key occurs
Impact on foreign keys and triggersLess impact because it updates onlyMay be affected during deletion
PerformanceGenerally fasterSlightly slower due to delete + insert
Data integrity riskLowRisk exists during deletion

මාර්ගෝපදේශයක් ලෙස, දත්ත මකා නොදැමී යාවත්කාලීන කිරීමට ON DUPLICATE KEY UPDATE භාවිතා කරන්න, සහ සම්පූර්ණ ප්‍රතිස්ථාපනය අවශ්‍ය නම් REPLACE භාවිතා කරන්න.

ප්‍රශ්න 4: WHERE කොටස අමතක කළහොත් කුමක් වේද?

පිළිතුර:

WHERE කොටසක් නිරූපණය නොකර UPDATE ප්‍රකාශනයක් ක්‍රියාත්මක කළහොත්, වගුවේ සියලු රෙකෝඩ්ස් යාවත්කාලීන වේ. මෙය ඉතා අවදානම් වන අතර, අනිච්චිත දත්ත වෙනස්කම් සිදු කරයි.

උදාහරණය:

-- The age of all records is updated to 30
UPDATE users
SET age = 30;

ආරක්ෂාව:

  • සෑම විටම WHERE කොටසක් නිරූපණය කරන්න, එවිට නියමිත කොන්දේසි වලට ගැලපෙන දත්ත පමණක් යාවත්කාලීන වේ.
  • හොඳ පුරුද්දක් ලෙස, UPDATE ක්‍රියාත්මක කිරීමට පෙර SELECT ප්‍රකාශනයක් ක්‍රියාත්මක කර, ඉලක්ක දත්ත තහවුරු කරගන්න.
    SELECT * FROM users WHERE name = 'Taro Yamada';
    UPDATE users SET age = 35 WHERE name = 'Taro Yamada';
    

ප්‍රශ්න 5: INSERT සහ UPDATE වේගවත් කිරීමේ ක්‍රමයක් තිබේද?

පිළිතුර:

පහත ක්‍රම භාවිතා කර කාර්ය සාධනය වැඩි කළ හැක.

  1. දර්ශක (indexes) සුදානම් කරන්න: අවශ්‍ය තීරුවල සුදුසු දර්ශක සකස් කිරීම, සෙවීම සහ යාවත්කාලීන කිරීම වේගවත් කරයි.
    CREATE INDEX idx_email ON users(email);
    
  1. කොටස් මෙහෙයුම්: එක් පේළියක් එක්ක සැකසීමට වඩා එකවර බහු පේළි ඇතුළත් කිරීම හෝ යාවත්කාලීන කිරීම වඩා කාර්යක්ෂම වේ.
    INSERT INTO users (name, email, age)
    VALUES
    ('Hanako Sato', 'hanako@example.com', 25),
    ('Ichiro Suzuki', 'ichiro@example.com', 40);
    
  1. ගනුදෙනු භාවිතා කරන්න: එකම ගනුදෙනුවක බහු මෙහෙයුම් සැකසීම ලොක් තරඟය අඩු කරයි.
    START TRANSACTION;
    INSERT INTO orders (order_id, user_id) VALUES (1, 1);
    UPDATE users SET last_order = NOW() WHERE user_id = 1;
    COMMIT;
    
  1. අවශ්‍ය නොවන මෙහෙයුම් වලක්වන්න: අවශ්‍ය නොවන යාවත්කාලීන හෝ ඇතුළත් කිරීම් වලින් වැළැක්වීමට දත්ත පෙර පරීක්ෂා කරන්න.
    SELECT COUNT(*) FROM users WHERE user_id = 1;
    -- Avoid unnecessary inserts/updates
    

Q6: INSERT හෝ UPDATE දෝෂ වලින් මට කෙසේ වැළැක්විය හැකිද?

පිළිතුර:

දෝෂ වලින් වැළැක්වීමට, පහත පියවර භාවිතා කරන්න.

  • දත්ත වර්ග තහවුරු කරන්න: ඔබ ඇතුළත්/යාවත්කාලීන කරන දත්ත තීරුවේ දත්ත වර්ගයට ගැළපෙන බව සහතික කරන්න.
  • සීමා නිවැරදිව සකසන්න: දත්ත අඛණ්ඩතාව රැක ගැනීමට ප්‍රාථමික යතුරු, ඒකක යතුරු, සහ විදේශ යතුරු සීමා නිවැරදිව සකසන්න.
  • දෝෂ හසුරවීම ක්‍රියාත්මක කරන්න: දෝෂ සිදුවන විට ඒවා හසුරවීමට ඔබේ වැඩසටහනේ තර්ක එකතු කරන්න.
    -- Roll back on error
    START TRANSACTION;
    INSERT INTO users (user_id, name, email) VALUES (1, 'Taro Yamada', 'taro@example.com');
    ROLLBACK; -- As needed
    

8. සාරාංශය

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

ප්‍රධාන ග්‍රහණයන්

1. INSERT මූලික කරුණු

  • INSERT භාවිතා කර නව දත්ත වගුවකට ඇතුළත් කරන්න.
  • ඔබට බහු පේළි ඇතුළත් කළ හැකි අතර එය කාර්යක්ෂම මෙහෙයුම් සලසයි.
  • NULL අගයන් සහ NOT NULL සීමා සමඟ අවධානයෙන් සිටින්න.

2. UPDATE මූලික කරුණු

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

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

  • INSERT ... ON DUPLICATE KEY UPDATE එකම මෙහෙයුමක නව දත්ත ඇතුළත් කිරීම සහ පවතින දත්ත යාවත්කාලීන කිරීම සක්‍රිය කරයි.
  • REPLACE දත්ත මකා නැවත ඇතුළත් කරයි, එබැවින් ට්‍රිගර් සහ විදේශ යතුරු ගැන සැලකිල්ලෙන් සිටින්න.

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

  • ඔබ ඉන්වෙන්ටරි කළමනාකරණය සහ පරිශීලක තොරතුරු කළමනාකරණය වැනි භාවිතා අවස්ථා වල INSERT සහ UPDATE භාවිතා කිරීම ඉගෙන ගත්තා.
  • බහු මෙහෙයුම් කාර්යක්ෂමව සැකසීමට හොඳම ක්‍රමෝපායන්ද අපි ඉදිරිපත් කළෙමු.

5. දෝෂ සහ විසඳුම්

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

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

  • INSERT සහ UPDATE තේරීම, ON DUPLICATE KEY UPDATE හි පරාසය, සහ කාර්ය සාධන අභිලක්ෂණය පිළිබඳ සාමාන්‍ය ප්‍රශ්න වලට අපි පිළිතුරු දුන්නෙමු.

ඊළඟ පියවර

MySQL INSERT සහ UPDATE ප්‍රකාශන දත්ත ගබඩා මෙහෙයුම් සඳහා මූලික වන අතර යෙදුම් සංවර්ධනය සඳහා අත්‍යවශ්‍ය කුසලතා වේ. මෙම ලිපියේ ඔබ ඉගෙන ගත් දේ මත පදනම්ව, පහත පියවර සලකා බලන්න.

  1. ගනුදෙනු කළමනාකරණය ඉගෙන ගන්න: උසස් දත්ත ගබඩා මෙහෙයුම් සිදු කිරීමට, ගනුදෙනු භාවිතය පිළිබඳ ඔබේ අවබෝධය ගැඹුරු කරන්න.
  2. ඉන්ඩෙක්ස් සැලසුම අභිලක්ෂණය කරන්න: දත්ත ප්‍රමාණය වැඩි වීමත් සමඟ විමසුම් කාර්යක්ෂමතාව රැක ගැනීමට ඉන්ඩෙක්ස් සැලසුම ඉගෙන ගන්න.
  3. දෝෂ නිරාකරණය සඳහා ලොග් කිරීම වැඩිදියුණු කරන්න: ලොග් රෙකෝඩ් කිරීම සහ විශ්ලේෂණය හඳුන්වා දී, දෝෂ සිදුවන විට හේතු ඉක්මනින් හඳුනා ගැනීමට හැකි වේ.
  4. නිල MySQL ලේඛන භාවිතා කරන්න: වැඩි විස්තර සහ නවතම විශේෂාංග සඳහා, නිල MySQL ලේඛන වෙත යොමු වන්න.

අවසාන සටහන

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

ඔබේ MySQL දැනුම තවත් ගැඹුරු කරගෙන යන්න!