MySQL-এ শর্তসহ TRUNCATE করা সম্ভব নয়। আপনি TRUNCATE স্টেটমেন্টে WHERE ক্লজ ব্যবহার করতে পারবেন না।
যদি শর্তের প্রয়োজন হয়, তবে DELETE কমান্ড ব্যবহার করুন:
DELETE FROM yourTableName WHERE yourCondition;
উপরের সিনট্যাক্স ঠিক আছে কিন্তু দ্রুত সমাধান চাইলে DELETE TRUNCATE-এর তুলনায় ভালো নয়। TRUNCATE-এর সুবিধা হলো এটি লগে কিছু লিখে না।
একটি টেবিল তৈরি করি:
mysql> CREATE TABLE DeleteDemo (
-> Id INT,
-> Name VARCHAR(100)
-> ); Query OK, 0 rows affected (1.22 sec)
ইনসার্ট কমান্ড দিয়ে কিছু রেকর্ড ইনসার্ট করি:
mysql> INSERT INTO DeleteDemo VALUES(101,'Carol'); Query OK, 1 row affected (0.15 sec) mysql> INSERT INTO DeleteDemo VALUES(102,'Sam'); Query OK, 1 row affected (0.15 sec) mysql> INSERT INTO DeleteDemo VALUES(103,'Bob'); Query OK, 1 row affected (0.16 sec) mysql> INSERT INTO DeleteDemo VALUES(104,'Mike'); Query OK, 1 row affected (0.17 sec) mysql> INSERT INTO DeleteDemo VALUES(105,'John'); Query OK, 1 row affected (0.09 sec) mysql> INSERT INTO DeleteDemo VALUES(106,'Maria'); Query OK, 1 row affected (0.20 sec) mysql> INSERT INTO DeleteDemo VALUES(107,'Johnson'); Query OK, 1 row affected (0.17 sec)
সিলেক্ট কমান্ড দিয়ে সব রেকর্ড দেখি:
mysql> SELECT * FROM DeleteDemo;
আউটপুট
+------+---------+ | Id | Name | +------+---------+ | 101 | Carol | | 102 | Sam | | 103 | Bob | | 104 | Mike | | 105 | John | | 106 | Maria | | 107 | Johnson | +------+---------+ 7 rows in set (0.00 sec)
WHERE ক্লজ ব্যবহার করে ডিলিট কমান্ড চালাতে পারেন কিন্তু এটি TRUNCATE नहीं। WHERE ক্লজ দিয়ে টেবিল থেকে রেকর্ড ডিলিট করার ক্যোয়ারি:
mysql> DELETE FROM DeleteDemo WHERE Id > 104; Query OK, 3 rows affected (0.13 sec)
আরেকবার সিলেক্ট কমান্ড দিয়ে টেবিল ডেটা চেক করি:
mysql> SELECT * FROM DeleteDemo;
আউটপুট
+------+-------+ | Id | Name | +------+-------+ | 101 | Carol | | 102 | Sam | | 103 | Bob | | 104 | Mike | +------+-------+ 4 rows in set (0.00 sec)
উপরের স্যাম্পল আউটপুটে দেখুন, ১০৪ থেকে বড় সব রেকর্ড টেবিল থেকে ডিলিট হয়েছে।