MySQL UNIQUE සීමාව පැහැදිලි කිරීම: නකල් දත්ත වැළැක්වීමේ ක්‍රම (උදාහරණ සමඟ)

目次

1. හැඳින්වීම

දත්ත සමුදා සැලසුම් කිරීමේදී, දත්ත අද්විතීයතාවය රැක ගැනීම ඉතා වැදගත් වේ. එකම දත්ත බහු වාරයක් ලියාපදිංචි කරන්නේ නම්, එය පද්ධති දෝෂ සහ දත්ත අසමතුලිතතාවයට හේතු විය හැක. MySQL මෙම ගැටලුව වැළැක්වීමට UNIQUE සීමාව (constraint) නමැති විශේෂාංගයක් ලබා දේ.

උදාහරණයක් ලෙස, පරිශීලකයන් වෙබ් සේවාවකට ලියාපදිංචි වන විට, එකම විද්‍යුත් තැපැල් ලිපිනය බහු වාරයක් ලියාපදිංචි කරන්නේ නම්, පිවිසුම් දෝෂ ඇති විය හැක. එවැනි තත්ත්වයන් වැළැක්වීමට, ඔබට UNIQUE සීමාව භාවිතා කර, නියමිත තීරුවේ අගයන් අද්විතීයව පවතින බව සහතික කළ හැක.

මෙම ලිපියේ, MySQL UNIQUE සීමාව පැහැදිලිව විස්තර කරමු—මූලික භාවිතයෙන් අධික උදාහරණ දක්වා. එසේම, වැදගත් සැලකිලි සහ නිතර අසන ප්‍රශ්න (FAQ) ගැනද කවර කරමු, එවිට ඔබට මෙම දැනුම වාස්තුකාලීන ව්‍යාපෘතිවල තත්කාලිකව යොදාගත හැක.

2. UNIQUE සීමාවේ මූලික කරුණු

UNIQUE සීමාව යනු කුමක්ද?

UNIQUE සීමාව MySQL හි නියමිත තීරුවක හෝ තීරු සංයෝගයක පිටපත් අගයන් වැළැක්වයි. මෙම සීමාව යෙදීමෙන්, එකම අගය එකවරට වඩා වැඩි වරක් ඇතුළත් කළ නොහැකි බව ඔබට සහතික වේ.

UNIQUE සහ PRIMARY KEY අතර වෙනස

MySQL PRIMARY KEY සීමාවද ලබා දේ, එය UNIQUE සීමාවට වඩා කිහිපයක් වෙනස් වේ.

  1. PRIMARY KEY සෑම විටම NOT NULL වේ PRIMARY KEY අද්විතීයතාවය සහතික කිරීමේ පමණක් නොව, NULL අගයන්ටද තහනමක් යෙදේ. එයට විරුද්ධව, UNIQUE සීමාව NULL අගයන්ට ඉඩ දේ.
  2. ප්‍රති එක් වාරයක් පමණක් PRIMARY KEY එකක් එක් වගුවකට PRIMARY KEY එකක් පමණක් තිබිය හැක, එත් එක් වගුවේ බහු UNIQUE සීමා නිර්වචනය කළ හැක.

UNIQUE සීමාව සඳහා සාමාන්‍ය භාවිතා අවස්ථා

UNIQUE සීමාව පහත සඳහන් අවස්ථා වල සාමාන්‍යයෙන් භාවිතා වේ:

  • විද්‍යුත් තැපැල් ලිපින හෝ පරිශීලක නාම සෑම පරිශීලකයෙකුටම අද්විතීය විද්‍යුත් තැපැල් ලිපිනයක් හෝ පරිශීලක නාමයක් තිබිය යුතු විට.
  • නිෂ්පාදන අංක හෝ ඇණවුම් අංක නිෂ්පාදන ID හෝ ඇණවුම් ID අනුපිළිවෙළ නැතිව තිබිය යුතු විට.
  • සංයුක්ත කොන්දේසි දෙකක් හෝ තවත් තීරු අතර අද්විතීයතාවය සහතික කළ යුතු විට.

3. UNIQUE සීමාව භාවිතා කරන ආකාරය

වගුවක් නිර්මාණය කරන විට එය නිර්වචනය කිරීම

MySQL හි, නව වගුවක් නිර්මාණය කරන විට UNIQUE සීමාව සෘජුවම නිර්වචනය කළ හැක.

උදාහරණය: තනි තීරුවකට යෙදීම

CREATE TABLE users (
    id INT AUTO_INCREMENT,
    email VARCHAR(255) UNIQUE,
    PRIMARY KEY (id)
);

මෙම උදාහරණයේ, email තීරුවට UNIQUE සීමාව යෙද ඇත. එකම විද්‍යුත් තැපැල් ලිපිනය බහු වාරයක් ඇතුළත් කිරීමට උත්සාහ කළහොත් දෝෂයක් සිදුවේ.

උදාහරණය: බහු තීරු (සංයුක්ත UNIQUE සීමාව)

CREATE TABLE orders (
    order_id INT AUTO_INCREMENT,
    product_id INT,
    user_id INT,
    UNIQUE (product_id, user_id),
    PRIMARY KEY (order_id)
);

මෙම උදාහරණය product_id සහ user_id සංයෝගය අද්විතීය බව සහතික කරයි. එකම පරිශීලකයා එකම නිෂ්පාදනය බහු වාරයක් ඇණවුම් කිරීම වැළැක්වීමට මෙය ප්‍රයෝජනවත් වේ.

පවතින වගුවකට සීමාව එකතු කිරීම

ඔබට පවතින වගුවකට UNIQUE සීමාව එකතු කළ හැක.

උදාහරණය: තනි තීරුවකට සීමාව එකතු කිරීම

ALTER TABLE users
ADD CONSTRAINT unique_email UNIQUE (email);

උදාහරණය: සංයුක්ත සීමාව එකතු කිරීම

ALTER TABLE orders
ADD CONSTRAINT unique_product_user UNIQUE (product_id, user_id);

සීමාව ඉවත් කිරීමේ ක්‍රමය

පවතින සීමාවක් ඉවත් කිරීමට, පහත SQL ප්‍රකාශන භාවිතා කරන්න:

තනි-තීරුවේ සීමාව ඉවත් කිරීම

ALTER TABLE users
DROP INDEX unique_email;

සංයුක්ත සීමාව ඉවත් කිරීම

ALTER TABLE orders
DROP INDEX unique_product_user;

4. UNIQUE සීමාව සඳහා වැදගත් සැලකිලි

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

UNIQUE සීමාව NULL අගයන්ට ඉඩ දෙන තීරුවකට යෙදෙන විට, විශේෂ නීති ක්‍රියාත්මක වේ. එකම තීරුවේ බහු NULL අගයන් තිබුණත් MySQL දෝෂයක් නොදැක්වයි. එය MySQL NULL අගයන් “කිසිවක් සමඟ සමාන නොවේ” ලෙස සැලකීම නිසාය.

උදාහරණය:

CREATE TABLE test_table (
    id INT AUTO_INCREMENT,
    column1 INT UNIQUE,
    PRIMARY KEY (id)
);

දැන්, පහත දත්ත ඇතුළත් කරන්න:

INSERT INTO test_table (column1) VALUES (NULL);
INSERT INTO test_table (column1) VALUES (NULL);

දෝෂයක් සිදුවන්නේ නැත. මෙය NULL අගයන් වෙනත් ඕනෑම අගයකට, අනෙක් NULL අගය ඇතුළත්, සමාන නොවන බව සැලකෙන නිසාය.

කාර්ය සාධන බලපෑම

ඔබ UNIQUE සීමාවක් නිර්වචනය කරන විට, MySQL ස්වයංක්‍රීයව අභ්‍යන්තරයෙන් ඉන්ඩෙක්ස් එකක් සෑදේ. මෙම ඉන්ඩෙක්ස් සෙවීම සහ දත්ත වර්ගීකරණයට උපකාරී වන අතර, විශාල ප්‍රමාණයේ දත්ත ඇතුළත් කිරීම හෝ යාවත්කාලීන කිරීමේදී කාර්ය සාධනය අඩු විය හැක.

  • සටහන 1: විශාල ප්‍රමාණයේ දත්ත එකවර ඇතුළත් කරන විට, UNIQUE සීමාව පරීක්ෂා කළ යුතුය, එය සැකසීම මන්දගාමී කරනු ඇත.
  • සටහන 2: ඉතා හොඳ කාර්ය සාධනය රැක ගැනීමට, දත්ත ප්‍රමාණය වැඩි වීමට පෙර ඉන්ඩෙක්ස් නැවත සකස් කිරීම සලකා බලන්න.

දෝෂ සිදුවන විට ඒවා හසුරවීම

UNIQUE සීමා උල්ලංඝනයක් සිදුවේ නම්, MySQL “1062” දෝෂ කේතය ලබා දෙයි. මෙම දෝෂය අනුපිළිවෙලට පිටපත් දත්ත ඇතුළත් කිරීමට උත්සාහ කරන විට සිදුවේ.

උදාහරණය:

INSERT INTO users (email) VALUES ('test@example.com');
INSERT INTO users (email) VALUES ('test@example.com');

දෙවන ඇතුළත් කිරීම දෝෂයක් ඇති කරයි.

විසඳුම්:

  1. දත්තය දැනටමත් පවතිනවාදැයි පරීක්ෂා කර පසු ඇතුළත් කරන්න.
    SELECT COUNT(*) FROM users WHERE email = 'test@example.com';
    
  1. ON DUPLICATE KEY UPDATE භාවිතා කර, පිටපත් දත්ත හඳුනාගත් විට දත්ත යාවත්කාලීන කරන්න.
    INSERT INTO users (email) VALUES ('test@example.com')
    ON DUPLICATE KEY UPDATE email = 'test@example.com';
    

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

Q1: UNIQUE සහ PRIMARY KEY අතර වෙනස කුමක්ද?

PRIMARY KEY එකම අද්විතීය බව සහතික කරයි සහ NULL අගයන්ට ඉඩ නොදේ. එක් වගුවකට PRIMARY KEY එකක් පමණක් නිර්වචනය කළ හැක. එයට විරුද්ධව, UNIQUE සීමා බහු තීරුවලට නිර්වචනය කළ හැකි අතර NULL අගයන්ට ඉඩ දේ.

Q2: NULL අගයන්ට ඉඩ දෙන තීරුවකට UNIQUE සීමාවක් යෙදුවහොත් කුමක් සිදුවේ?

බහු NULL අගයන් ඇතුළත් කළ හැක. මෙය MySQL NULL අගයන් අසමාන ලෙස සැලකීම නිසාය.

Q3: සංයුක්ත UNIQUE සීමාව කවදා භාවිතා කළ යුතුද?

එය තීරුවල සංයුක්තයක් තුළ අද්විතීය බව සහතික කිරීමට අවශ්‍ය වන විට භාවිතා වේ; උදාහරණයක් ලෙස product_id සහ user_id සංයුක්තය අද්විතීය බවට පත් කිරීම. මෙය පරිශීලකයෙකුට එකම නිෂ්පාදනය බහු වාරයක් ඇණවුම් කිරීම වැලැක්වීමට උපකාරී වේ.

Q4: පිටපත් දත්ත දැනටමත් පවතින විට UNIQUE සීමාව එකතු කළ හැකිද?

නැත. පිටපත් දත්ත දැනටමත් පවතින විට, UNIQUE සීමාව එකතු කළ නොහැක. සීමාව එකතු කිරීමට පෙර, පිටපත් වාර්තා ඉවත් කිරීම හෝ නිවැරදි කිරීම අවශ්‍ය වේ.

Q5: UNIQUE සීමාව ඉවත් කිරීමෙන් එහි ඉන්ඩෙක්ස්ද ඉවත් වේද?

ඔව්. UNIQUE සීමාව ඉවත් කරන විට, ඒ සම්බන්ධිත ඉන්ඩෙක්ස්ද ඉවත් කරයි.

6. සාරාංශය

MySQL UNIQUE සීමාව දත්ත අද්විතීය බව සහතික කිරීම සඳහා ඉතා ප්‍රයෝජනවත් ලක්ෂණයක් වේ. එය PRIMARY KEY සමඟ ඇති වෙනස්කම් සහ NULL අගයන් කෙසේ හසුරවන්නේදැයි අවබෝධ කරගැනීමෙන්, ඔබේ දත්ත ගබඩා සැලසුමේ ගුණාත්මකභාවය ගණනාවක් වැඩි කළ හැක.

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

ඊළඟ ලිපියේ, MySQL හි ඉන්ඩෙක්ස් කාර්යක්ෂමව භාවිතා කිරීම පිළිබඳව සහ FOREIGN KEY සහ CHECK වැනි අනෙකුත් සීමා ගැන සාකච්ඡා කරනු ඇත. නිරන්තරයෙන් නවතම තොරතුරු සඳහා අප සමඟ රැඳී සිටින්න!