Computer >> कंप्यूटर ट्यूटोरियल >  >> प्रोग्रामिंग >> MySQL

MySQL में IN() क्लॉज़ के साथ एक क्वेरी में रिकॉर्ड कैसे डिलीट करें?

MySQL में एक ही क्वेरी में एकाधिक विशिष्ट रिकॉर्ड डिलीट करने के लिए, DELETE स्टेटमेंट के साथ IN() ऑपरेटर का उपयोग करें। यह एकाधिक DELETE स्टेटमेंट चलाने से अधिक कुशल और पठनीय है।

उदाहरण: विशिष्ट StudentId वाले रिकॉर्ड डिलीट करना

डेमो टेबल बनाएं:

mysql> CREATE TABLE DemoTable1922 (
    StudentId INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
    StudentName VARCHAR(20)
);

डेटा इन्सर्ट करें:

mysql> INSERT INTO DemoTable1922 (StudentName) VALUES
('Chris'), ('Robert'), ('David'), ('Mike');

डिलीट से पहले:

+-----------+-------------+
| StudentId | StudentName |
+-----------+-------------+
| 1         | Chris       |
| 2         | Robert      |
| 3         | David       |
| 4         | Mike        |
+-----------+-------------+

IN() के साथ एक क्वेरी में डिलीट करें:

mysql> DELETE FROM DemoTable1922 WHERE StudentId IN (1, 2, 3, 4);

आउटपुट: Query OK, 4 rows affected

डिलीट के बाद:

mysql> SELECT * FROM DemoTable1922;
Empty set (0.00 sec)

सिंटैक्स

DELETE FROM table_name WHERE column_name IN (value1, value2, ..., valueN);

लाभ

  • एटॉमिक: सभी डिलीट एक ही ट्रांजैक्शन में
  • कुशल: सिंगल टेबल स्कैन, सिंगल लॉक अधिग्रहण
  • पठनीय: इरादा स्पष्ट है
  • नेटवर्क: एक राउंड-ट्रिप बनाम एकाधिक

सबक्वेरी के साथ IN()

दूसरे टेबल या शर्त के आधार पर डिलीट करें:

-- निष्क्रिय यूज़र्स के ऑर्डर डिलीट करें
DELETE FROM orders 
WHERE user_id IN (SELECT id FROM users WHERE status = 'inactive');

-- पुराने लॉग डिलीट करें
DELETE FROM logs 
WHERE id IN (SELECT id FROM logs WHERE created_at < '2023-01-01' LIMIT 1000);

सावधानियां

  • WHERE के बिना: DELETE FROM table सभी पंक्तियाँ डिलीट कर देगा (TRUNCATE से धीमा)
  • बड़े IN लिस्ट: बहुत बड़ी लिस्ट (हजारों) के लिए, अस्थायी टेबल या JOIN बेहतर हो सकता है
  • विदेशी कुंजी: ON DELETE RESTRICT/SET NULL व्यवहार लागू होगा
  • ट्रिगर: प्रत्येक डिलीट की गई पंक्ति के लिए DELETE ट्रिगर फायर होंगे

TRUNCATE vs DELETE

सभी पंक्तियाँ डिलीट करने के लिए TRUNCATE TABLE तेज़ है (लॉग नहीं करता, ऑटो-इन्क्रीमेंट रीसेट करता है), लेकिन WHERE क्लॉज़ नहीं ले सकता।

  1. - MySQL में एक ही क्वेरी में एकाधिक रिकॉर्ड कैसे अपडेट करें?

    MySQL में UPDATE स्टेटमेंट में WHERE क्लॉज का उपयोग करके एक ही क्वेरी में एकाधिक कॉलम अपडेट किए जा सकते हैं, लेकिन एकाधिक पंक्तियों को अलग-अलग मानों से अपडेट करने के लिए CASE या एकाधिक क्वेरी की आवश्यकता होती है। उदाहरण: एक पंक्ति, एकाधिक कॉलम तालिका बनाएं: mysql> CREATE TABLE DemoTable ( -&

  1. - MySQL में अलग कॉलम वाली टेबल में रिकॉर्ड कैसे कॉपी करें?

    MySQL में एक टेबल से दूसरी टेबल में डेटा कॉपी करने के लिए, जब कॉलम नाम या संरचना अलग हो, तो INSERT INTO ... SELECT स्टेटमेंट का उपयोग करें। यह कॉलम मैपिंग को स्पष्ट रूप से परिभाषित करने की अनुमति देता है। उदाहरण: अलग कॉलम नामों के साथ डेटा कॉपी स्रोत टेबल बनाएं (ऑटो-इन्क्रीमेंट प्राइमरी की के साथ)

  1. - MySQL में LIKE के साथ एकाधिक शब्दों से रिकॉर्ड कैसे फ़िल्टर करें?

    MySQL में किसी कॉलम को एकाधिक पैटर्न/शब्दों के विरुद्ध फ़िल्टर करने के लिए, RLIKE (या REGEXP) ऑपरेटर का उपयोग करें जो रेगुलर एक्सप्रेशन ऑल्टरनेशन (|) सपोर्ट करता है। यह एकाधिक LIKE शर्तों से अधिक संक्षिप्त और लचीला है। उदाहरण: SQL या Python वाले विषय खोजना डेमो टेबल बनाएं: mysql> CREATE TABLE