AUTO_INCREMENT কীভাবে কাজ করে সেটি বুঝি:
AUTO_INCREMENT অ্যাট্রিবিউট নতুন সারির জন্য ইউনিক আইডেন্টিফায়ার জেনারেট করতে ব্যবহৃত হয়। নিচের কোয়েরি বিবেচনা করুন:
কোয়েরি
CREATE TABLE tableName (
id MEDIUMINT NOT NULL AUTO_INCREMENT,
name CHAR(30) NOT NULL,
PRIMARY KEY (id)
);
INSERT INTO tableName (name) VALUES ('val1'),('val2'),('val3'), ('val4');
SELECT * FROM tableName;
আউটপুট
+----+---------+ | id | name | +----+---------+ | 1 | val1 | | 2 | val2 | | 3 | val3 | | 4 | val4 | +----+---------+
উপরের কোয়েরিতে AUTO_INCREMENT কলামের জন্য কোনো ভ্যালু স্পেসিফাই করা হয়নি, তাই MySQL স্বয়ংক্রিয়ভাবে id কলামে সংখ্যা সিকোয়েন্স অ্যাসাইন করল। 0 ভ্যালু এক্সপ্লিসিটলি অ্যাসাইন করলেও নম্বর সিকোয়েন্স ০ থেকে শুরু হয় (যদি NO AUTO VALUE ON ZERO SQL মোড এনাবল না থাকে)।
- কলাম
NOT NULLডিক্লেয়ার থাকলে NULL অ্যাসাইন করলে সংখ্যা সিকোয়েন্স জেনারেট হয়। AUTO_INCREMENTকলামে যেকোনো ভ্যালু ইনসার্ট করলে কলামটি সেটি ভ্যালুতে সেট হয় এবং সিকোয়েন্স রিসেট হয় সর্বোচ্চ কলাম ভ্যালু থেকে ক্রমাগত মান জেনারেট করার জন্য।- বিদ্যমান
AUTO_INCREMENTকলাম আপডেট করলে সিকোয়েন্স রিসেট হয়। - সাম্প্রতিক অটো-জেনারেটেড
AUTO_INCREMENTভ্যালুLAST_INSERT_ID()(SQL) বাmysql_insert_id()(C API) দিয়ে পাওয়া যায়। - এই ফাংশনগুলো কানেকশন-স্পেসিফিক, অন্য কানেকশনের ইনসার্ট অপারেশন থেকে প্রভাবিত হয় না।
AUTO_INCREMENTকলামের জন্য সবচেয়ে ছোট ইন্টিজার ডেটা টাইপ ব্যবহার করুন যা সর্বোচ্চ সিকোয়েন্স ভ্যালু ধারণ করতে পারে।- কলাম ডেটা টাইপের উপরের রেঞ্জে পৌঁছালে আর সিকোয়েন্স জেনারেট করা যায় না (ফেল করবে)।
তাই সম্ভব হলে UNSIGNED অ্যাট্রিবিউট ব্যবহার করুন যাতে AUTO_INCREMENT কলামে বেশি রেঞ্জের ভ্যালু পাওয়া যায়।