কম্পিউটার টিউটোরিয়াল

MySQL-এ UNIQUE কনস্ট্রেইন্ট থাকলে ডুপ্লিকেট ইনসার্টের বर्तব: এরর এবং কোনো রো ইনসার্ট হয় না

MySQL-এ UNIQUE কনস্ট্রেইন্ট থাকা টেবিলে একাধিক রো একসাথে ইনসার্ট করলে (multi-row INSERT), যেকোনো একটি রো ডুপ্লিকেট হলে পুরো ব্যাচ ফেইল হয় এবং কোনো রোই ইনসার্ট হয় না (অ্যাল-অর-নাথিং)۔

উদাহরণ

১. ইউনিক কনস্ট্রেইন্ট সহ টেবিল তৈরি করুন

mysql> CREATE TABLE DemoTable1585 (
    -> StudentId INT,
    -> StudentMarks INT,
    -> UNIQUE(StudentId)
    -> );

২. একসাথে ৪টি রো ইনসার্ট করার চেষ্টা করুন (তৃতীয় ও চতুর্থ রো ডুপ্লিকেট StudentId=3)

mysql> INSERT INTO DemoTable1585 VALUES(1, 87), (2, 98), (3, 91), (3, 48);
ERROR 1062 (23000): Duplicate entry '3' for key 'StudentId'

৩. টেবিল চেক করুন (খালি থাকবে)

mysql> SELECT * FROM DemoTable1585;

আউটপুট: Empty set (0.00 sec)

ব্যাখ্যা: MySQL মাল্টি-রো INSERT-কে একক ট্রানজ্যাকশন হিসেবে বर्टাব করে। যেকোনো রো কনস্ট্রেইন্ট ভায়ল করলে পুরো স্টেটমেন্ট রোলব্যাক হয়।

সমাধান:

  • INSERT IGNORE INTO ... - ডুপ্লিকেট রো স্কিপ করে বাকিগুলো ইনসার্ট করে।
  • INSERT ... ON DUPLICATE KEY UPDATE ... - ডুপ্লিকেট হলে আপডেট করে।
  • একটি একটি করে ইনসার্ট করুন (TRY-CATCH / অ্যাপ্লিকেশন লেভেলে)۔
  • স্টোরড প্রোসিডিউরে লুপ চালিয়ে একটি একটি ইনসার্ট করুন।

InnoDB নোট: ট্রানজ্যাকশনাল エンজিন হওয়ায় এই আচরণ নিশ্চিত। MyISAM-এ আংশিক ইনসার্ট হয়েতো (রিকমেন্ডেড নয়)।

  1. MySQL-এ নির্দিষ্ট মান 'None' কে 'N/A' দিয়ে আপডেট করা

  2. MySQL-এ LPAD() এবং COALESCE() দিয়ে প্রিসিডিং জিরো সহ আইডি জেনারেট করা

  3. মেটাভার্স কী এবং ফেসবুকের সাথে এর কী সম্পর্ক?

  4. এক্সেলে ডুপ্লিকেট ভ্যালু থাকলেও রিলেশনশিপ তৈরি: ধাপে ধাপে গাইড