WHERE क्लॉज के साथ DELETE से रिकॉर्ड हटाना
MySQL में किसी न्यूमेरिक कॉलम की वैल्यू एक खास थ्रेशोल्ड से ज्यादा होने पर उन रिकॉर्ड्स को डिलीट करने के लिए DELETE स्टेटमेंट के साथ WHERE क्लॉज का उपयोग करें।
टेबल बनाना और डेटा इन्सर्ट करना
CREATE TABLE DemoTable (
Id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
PlayerName VARCHAR(100),
PlayerScore INT
);
INSERT INTO DemoTable(PlayerName, PlayerScore) VALUES('Chris', 780);
INSERT INTO DemoTable(PlayerName, PlayerScore) VALUES('Sam', 1100);
INSERT INTO DemoTable(PlayerName, PlayerScore) VALUES('Mike', 900);
INSERT INTO DemoTable(PlayerName, PlayerScore) VALUES('Bob', 890);
INSERT INTO DemoTable(PlayerName, PlayerScore) VALUES('Carol', 1000);
मौजूदा डेटा
+----+------------+-------------+ | Id | PlayerName | PlayerScore | +----+------------+-------------+ | 1 | Chris | 780 | | 2 | Sam | 1100 | | 3 | Mike | 900 | | 4 | Bob | 890 | | 5 | Carol | 1000 | +----+------------+-------------+
क्वेरी: 900 से ज्यादा स्कोर वाले डिलीट करना
DELETE FROM DemoTable WHERE PlayerScore > 900;
Query OK, 2 rows affected (0.18 sec)
डिलीशन के बाद डेटा
SELECT * FROM DemoTable;
+----+------------+-------------+ | Id | PlayerName | PlayerScore | +----+------------+-------------+ | 1 | Chris | 780 | | 3 | Mike | 900 | | 4 | Bob | 890 | +----+------------+-------------+
महत्वपूर्ण बिंदु
WHEREक्लॉज के बिनाDELETEसभी रिकॉर्ड डिलीट कर देगा- डिलीट करने से पहले
SELECT * FROM DemoTable WHERE PlayerScore > 900;चलाकर देख लें - बड़े डेटासेट के लिए बैच में डिलीट करें:
DELETE ... LIMIT 1000; TRUNCATEतेज है लेकिन शर्त नहीं लगा सकते- विदेशी कुंजी (Foreign Key) होने पर ON DELETE CASCADE/SET NULL व्यवहार चेक करें
सॉफ्ट डिलीट विकल्प (अनुशंसित)
ALTER TABLE DemoTable ADD COLUMN IsDeleted BOOLEAN DEFAULT FALSE; UPDATE DemoTable SET IsDeleted = TRUE WHERE PlayerScore > 900;
फिर क्वेरीज़ में WHERE IsDeleted = FALSE जोड़ें।