১. TRUNCATE স্টেটমেন্ট কী?
TRUNCATE স্টেটমেন্টের মৌলিক ধারণা
MySQL‑এর TRUNCATE স্টেটমেন্ট হল একটি কমান্ড, যা একসাথে একটি টেবিলের সব ডেটা মুছে ফেলে। DELETE স্টেটমেন্টের বিপরীতে, যা সারি‑সারি মুছে ফেলে, TRUNCATE টেবিলটি অভ্যন্তরীণভাবে পুনরায় তৈরি করে ডেটা মুছে দেয়। ফলে, বড় পরিমাণের ডেটা দক্ষতার সাথে মুছে ফেলার ক্ষেত্রে এটি অত্যন্ত কার্যকর।
মৌলিক সিনট্যাক্স
TRUNCATE স্টেটমেন্টের মৌলিক সিনট্যাক্স নিম্নরূপঃ
TRUNCATE TABLE table_name;
এটি নির্দিষ্ট টেবিলের সব সারি মুছে ফেলে এবং টেবিলকে তার প্রাথমিক অবস্থায় ফিরিয়ে দেয়। তবে, মুছে ফেলা ডেটা পুনরুদ্ধার করা যায় না, তাই এই কমান্ডটি সতর্কতার সঙ্গে ব্যবহার করতে হবে।
উদাহরণ: মৌলিক ব্যবহার
নিম্নের উদাহরণে users নামের একটি টেবিল তৈরি করা হয়েছে এবং তার সব ডেটা মুছে ফেলার জন্য TRUNCATE স্টেটমেন্ট ব্যবহার করা হয়েছে।
CREATE TABLE users (
id INT AUTO_INCREMENT,
name VARCHAR(100),
PRIMARY KEY (id)
);
INSERT INTO users (name) VALUES ('Taro'), ('Hanako'), ('Jiro');
-- Execute TRUNCATE
TRUNCATE TABLE users;
-- The table becomes empty, and AUTO_INCREMENT is reset.
এই উদাহরণে টেবিলের সব ডেটা মুছে ফেলা হয়, এবং নতুন ডেটা ইনসার্ট করা হলে id কলামটি আবার ১ থেকে শুরু হয়।

২. TRUNCATE এবং DELETE এর পার্থক্য
গতি ও পারফরম্যান্সের পার্থক্য
TRUNCATE বিশেষভাবে পুরো টেবিলের ডেটা মুছে ফেলার জন্য অপ্টিমাইজ করা হয়েছে, তাই এটি DELETE‑এর তুলনায় অনেক দ্রুত। DELETE সারি‑সারি মুছে ফেলে, ফলে বড় সংখ্যক সারি নিয়ে কাজ করার সময় ধীর হয়ে যায়। অন্যদিকে, TRUNCATE টেবিলটি অভ্যন্তরীণভাবে পুনরায় তৈরি করে ডেটা মুছে দেয়, যা বড় পরিমাণের ডেটা মুছে ফেলার ক্ষেত্রে অত্যন্ত কার্যকর।
উদাহরণ: পারফরম্যান্স তুলনা
মিলিয়ন সংখ্যক সারি মুছে ফেলতে হলে DELETE স্টেটমেন্টটি নিম্নরূপ লেখা হবে:
DELETE FROM users WHERE condition;
এর তুলনায়, TRUNCATE ব্যবহার করলে একবারে সব সারি মুছে ফেলা যায়:
TRUNCATE TABLE users;
টেবিলটি খুব বড় হলে এই পার্থক্যটি বিশেষভাবে স্পষ্ট হয়। DELETE‑এর সঙ্গে সময়সাপেক্ষ অপারেশনগুলো TRUNCATE‑এর মাধ্যমে প্রায় সঙ্গে সঙ্গে সম্পন্ন হয়।
রোলব্যাকের পার্থক্য
TRUNCATE স্টেটমেন্ট রোলব্যাক করা যায় না। একবার চালানোর পর ডেটা স্থায়ীভাবে মুছে যায় এবং পুনরুদ্ধার করা সম্ভব নয়। অন্যদিকে, ট্রানজ্যাকশনের মধ্যে DELETE ব্যবহার করলে ত্রুটি ঘটলে রোলব্যাক করা যায়, ফলে ডেটা পুনরুদ্ধার করা সম্ভব। নিরাপত্তার দৃষ্টিকোণ থেকে এটি একটি গুরুত্বপূর্ণ পার্থক্য।
সিলেক্টিভ ডিলিশনের পার্থক্য
DELETE স্টেটমেন্ট WHERE ক্লজ ব্যবহার করে নির্দিষ্ট শর্তের ভিত্তিতে সারি মুছে ফেলার অনুমতি দেয়, কিন্তু TRUNCATE সিলেক্টিভ ডিলিশন সমর্থন করে না। উদাহরণস্বরূপ, যদি আপনি শুধুমাত্র একটি নির্দিষ্ট ইউজার মুছে ফেলতে চান, তবে নিচের মতো DELETE ব্যবহার করবেন:
DELETE FROM users WHERE id = 1;
TRUNCATE সব সারি মুছে ফেলে, তাই নির্দিষ্ট রেকর্ড মুছে ফেলতে হলে DELETE বেশি উপযুক্ত।
৩. AUTO_INCREMENT‑এর উপর TRUNCATE এর প্রভাব
AUTO_INCREMENT রিসেট করা
TRUNCATE স্টেটমেন্ট ব্যবহার করলে টেবিলের সব ডেটা মুছে যায় এবং একই সঙ্গে AUTO_INCREMENT মান রিসেট হয়। এর অর্থ হল নতুন ডেটা যোগ করার সময় ID আবার ১ থেকে শুরু হবে। উদাহরণস্বরূপ, users টেবিলে নতুন ডেটা ইনসার্ট করলে তা নিম্নরূপ দেখাবে:
INSERT INTO users (name) VALUES ('Ken');
-- The id starts again from 1
এই রিসেট কিছু পরিস্থিতিতে সুবিধাজনক হতে পারে। তবে, অন্য টেবিলে ID গুলো ফোরেইন কী হিসেবে ব্যবহৃত হলে সতর্কতা প্রয়োজন। অপ্রত্যাশিত ডেটা অসঙ্গতি ঘটতে পারে, তাই TRUNCATE ব্যবহার করার আগে এর প্রভাবগুলো ভালোভাবে বিবেচনা করুন।
৪. TRUNCATE ব্যবহার করার সময় গুরুত্বপূর্ণ বিবেচ্য বিষয়গুলো
ডেটা পুনরুদ্ধার করা যায় না
TRUNCATE স্টেটমেন্টের সবচেয়ে বড় ঝুঁকি হল ডেটা পুনরুদ্ধার করা যায় না। গুরুত্বপূর্ণ ডেটা দুর্ঘটনাক্রমে মুছে ফেললে তা পুনরায় পাওয়া সম্ভব নয়। তাই এই কমান্ডটি চালানোর আগে ডেটার ব্যাকআপ নেওয়া অত্যন্ত সুপারিশ করা হয়।
ফোরেইন কী কনস্ট্রেইন্টস
.TRUNCATE স্টেটমেন্টটি এমন টেবিলগুলিতে ব্যবহার করা যায় না যেগুলিতে ফরেন কী কনস্ট্রেইন্ট সক্রিয় আছে। এমন ক্ষেত্রে, আপনাকে প্রথমে ফরেন কী কনস্ট্রেইন্টগুলি সরাতে হবে অথবা সংশ্লিষ্ট ডেটা অন্য পদ্ধতিতে হ্যান্ডেল করতে হবে।
এক্সিকিউশন অধিকার
TRUNCATE স্টেটমেন্টটি চালানোর জন্য আপনার টেবিল মুছে ফেলার অধিকার (DROP অধিকার) থাকতে হবে। প্রয়োজনীয় অনুমতি না থাকা ব্যবহারকারীরা এই কমান্ডটি চালাতে পারবেন না, তাই আগে থেকেই উপযুক্ত অধিকারগুলি যাচাই করে নিন।

5. কখন TRUNCATE বনাম DELETE ব্যবহার করবেন
কখন আপনি TRUNCATE ব্যবহার করা উচিত
একই সময়ে পুরো টেবিল পরিষ্কার করতে হলে TRUNCATE উপযুক্ত। এটি বিশেষভাবে উপকারী যখন আপনি দ্রুত সব ডেটা মুছে ফেলতে চান অথবা AUTO_INCREMENT রিসেট করা প্রয়োজন। উদাহরণস্বরূপ, টেস্ট ডেটা বারবার রিসেট করতে চাইলে এটি আদর্শ।
কখন আপনি DELETE ব্যবহার করা উচিত
অন্যদিকে, যদি নির্দিষ্ট সারি মুছে ফেলা বা ট্রিগার চালানো প্রয়োজন হয়, তবে আপনাকে DELETE স্টেটমেন্ট ব্যবহার করা উচিত। নির্দিষ্ট শর্তের ভিত্তিতে ডেটা মুছে ফেলা বা ডেটাবেসের অখণ্ডতা নিরাপদে বজায় রাখতে DELETE বেশি উপযুক্ত।
6. নিরাপদে TRUNCATE ব্যবহার করার সেরা পদ্ধতি
ব্যাকআপের গুরুত্ব
TRUNCATE স্টেটমেন্ট চালানোর আগে একটি ডেটা ব্যাকআপ তৈরি করা অপরিহার্য। দুর্ঘটনাবশত ডেটা মুছে যাওয়া থেকে সৃষ্ট ডেটা ক্ষতি পুনরুদ্ধার করা যায় না, তাই বিশেষ করে প্রোডাকশন পরিবেশে অতিরিক্ত সতর্কতা প্রয়োজন।
টেস্ট পরিবেশে যাচাই করুন
প্রোডাকশন পরিবেশে TRUNCATE চালানোর আগে, এটি ডেভেলপমেন্ট বা স্টেজিং পরিবেশে পরীক্ষা করার পরামর্শ দেওয়া হয়। এটি নিশ্চিত করতে সাহায্য করে যে এটি প্রত্যাশিতভাবে কাজ করছে এবং অপ্রত্যাশিত সমস্যাগুলি রোধ করে।
AUTO_INCREMENT কলাম পরিচালনা
TRUNCATE AUTO_INCREMENT রিসেট করে, তাই যদি ইউনিক আইডি সামঞ্জস্য বজায় রাখা গুরুত্বপূর্ণ হয়, তবে চালানোর আগে ডেটা ব্যাকআপ এবং অন্যান্য টেবিলের সঙ্গে সম্পর্ক যাচাই করা উচিত।


