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-এ আংশিক ইনসার্ট হয়েতো (রিকমেন্ডেড নয়)।