নির্দিষ্ট থ্রেশহোল্ডের চেয়ে বড় মানযুক্ত রেকর্ড ডিলিট করতে DELETE ... WHERE column > value ব্যবহার করা হয়।
টেবিল তৈরি ও ডেটা ইনসার্ট
mysql> CREATE TABLE DemoTable (
Id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
PlayerName VARCHAR(100),
PlayerScore INT
);
Query OK, 0 rows affected (0.97 sec)
mysql> INSERT INTO DemoTable(PlayerName, PlayerScore) VALUES ('Chris', 780);
Query OK, 1 row affected (0.25 sec)
mysql> INSERT INTO DemoTable(PlayerName, PlayerScore) VALUES ('Sam', 1100);
Query OK, 1 row affected (0.23 sec)
mysql> INSERT INTO DemoTable(PlayerName, PlayerScore) VALUES ('Mike', 900);
Query OK, 1 row affected (0.13 sec)
mysql> INSERT INTO DemoTable(PlayerName, PlayerScore) VALUES ('Bob', 890);
Query OK, 1 row affected (0.15 sec)
mysql> INSERT INTO DemoTable(PlayerName, PlayerScore) VALUES ('Carol', 1000);
Query OK, 1 row affected (0.20 sec)
রেকর্ড দেখানো
mysql> SELECT * FROM DemoTable;
আউটপুট:
+----+------------+-------------+ | Id | PlayerName | PlayerScore | +----+------------+-------------+ | 1 | Chris | 780 | | 2 | Sam | 1100 | | 3 | Mike | 900 | | 4 | Bob | 890 | | 5 | Carol | 1000 | +----+------------+-------------+ 5 rows in set (0.00 sec)
PlayerScore > 900 হলে ডিলিট
mysql> DELETE FROM DemoTable WHERE PlayerScore > 900; Query OK, 2 rows affected (0.18 sec)
ডিলিট পর রেকর্ড
mysql> SELECT * FROM DemoTable;
ফলাফল (Sam 1100, Carol 1000 ডিলিট):
+----+------------+-------------+ | Id | PlayerName | PlayerScore | +----+------------+-------------+ | 1 | Chris | 780 | | 3 | Mike | 900 | | 4 | Bob | 890 | +----+------------+-------------+ 3 rows in set (0.00 sec)
সতর্কতা ও সেরা অনুশীলন
- WHERE ছাড়া DELETE - সকল রো মুছে ফেলে (বিরাম চিহ্ন দিন!)।
- বড় টেবিলে ব্যাচে ডিলিট করুন (LIMIT দিয়ে) লক এড়াতে:
DELETE FROM t WHERE score > 900 LIMIT 1000;(লুপ চালিয়ে)۔ - ফরেন কী কনস্ট্রেইন্ট থাকলে
ON DELETE CASCADE/SET NULLচেক করুন। - ট্রানজ্যাকশন ব্যবহার করুন:
START TRANSACTION; DELETE ...; COMMIT;।