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

MySQL में रिकॉर्ड्स को ऑर्डर करके N पंक्तियाँ हटाएं (ORDER BY ... LIMIT के साथ DELETE)

MySQL में ORDER BY और LIMIT के साथ विशिष्ट पंक्तियाँ हटाना

MySQL DELETE स्टेटमेंट में ORDER BY और LIMIT क्लॉज का समर्थन करता है, जिससे आप एक विशिष्ट क्रम में केवल पहली N पंक्तियों को हटा सकते हैं। यह पुराने रिकॉर्ड्स को संग्रहीत करने, डुप्लिकेट हटाने, या नमूना डेटा हटाने के लिए उपयोगी है।

टेबल बनाना

mysql> CREATE TABLE DemoTable (
    -> Id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
    -> FirstName VARCHAR(20)
    -> );
Query OK, 0 rows affected (0.65 sec)

डेटा डालना

mysql> INSERT INTO DemoTable(FirstName) VALUES ('Chris');
Query OK, 1 row affected (0.12 sec)
mysql> INSERT INTO DemoTable(FirstName) VALUES ('Adam');
Query OK, 1 row affected (0.11 sec)
mysql> INSERT INTO DemoTable(FirstName) VALUES ('John');
Query OK, 1 row affected (0.11 sec)
mysql> INSERT INTO DemoTable(FirstName) VALUES ('David');
Query OK, 1 row affected (0.12 sec)
mysql> INSERT INTO DemoTable(FirstName) VALUES ('Mike');
Query OK, 1 row affected (0.19 sec)
mysql> INSERT INTO DemoTable(FirstName) VALUES ('Carol');
Query OK, 1 row affected (0.17 sec)
mysql> INSERT INTO DemoTable(FirstName) VALUES ('Sam');
Query OK, 1 row affected (0.13 sec)

हटाने से पहले सभी रिकॉर्ड्स

mysql> SELECT * FROM DemoTable;
+----+-----------+
| Id | FirstName |
+----+-----------+
|  1 | Chris     |
|  2 | Adam      |
|  3 | John      |
|  4 | David     |
|  5 | Mike      |
|  6 | Carol     |
|  7 | Sam       |
+----+-----------+
7 rows in set (0.00 sec)

वर्णानुक्रम में पहली 4 पंक्तियाँ हटाना

mysql> DELETE FROM DemoTable 
    -> ORDER BY FirstName ASC 
    -> LIMIT 4;
Query OK, 4 rows affected (0.19 sec)

हटाने के बाद शेष रिकॉर्ड्स

mysql> SELECT * FROM DemoTable;
+----+-----------+
| Id | FirstName |
+----+-----------+
|  3 | John      |
|  5 | Mike      |
|  7 | Sam       |
+----+-----------+
3 rows in set (0.00 sec)

क्या हुआ?

  1. ORDER BY FirstName ASC: नाम के अनुसार वर्णानुक्रम में क्रमबद्ध: Adam, Carol, Chris, David, John, Mike, Sam
  2. LIMIT 4: पहली 4 पंक्तियाँ लेता है: Adam (Id=2), Carol (Id=6), Chris (Id=1), David (Id=4)
  3. DELETE: ये 4 पंक्तियाँ हटा दी जाती हैं
  4. शेष: John (3), Mike (5), Sam (7)

महत्वपूर्ण विचार

  • LIMIT के बिना ORDER BY DELETE खतरनाक है - यह सभी पंक्तियाँ हटा देगा
  • लेनदेन का उपयोग करें महत्वपूर्ण डेटा के लिए: START TRANSACTION; DELETE ...; COMMIT;
  • पहले SELECT के साथ सत्यापित करें:
    SELECT * FROM DemoTable ORDER BY FirstName ASC LIMIT 4;
  • बहु-टेबल DELETE ORDER BY LIMIT का समर्थन नहीं करता

आम उपयोग मामले

सबसे पुराने N रिकॉर्ड्स हटाएं (लॉग रोटेशन)

DELETE FROM Logs 
ORDER BY CreatedAt ASC 
LIMIT 1000;

डुप्लिकेट रखते हुए पहली घटना हटाएं

DELETE t1 FROM DemoTable t1
INNER JOIN DemoTable t2 
WHERE t1.Id > t2.Id AND t1.Email = t2.Email
ORDER BY t1.Id ASC
LIMIT 10;

यादृच्छिक नमूना हटाएं

DELETE FROM DemoTable 
ORDER BY RAND() 
LIMIT 100;

चेतावनी: प्रतिकृति और बाइनरी लॉगिंग

DELETE ... ORDER BY ... LIMIT स्टेटमेंट-आधारित प्रतिकृति के साथ असुरक्षित है क्योंकि क्रम रेप्लिका पर भिन्न हो सकता है। पंक्ति-आधारित प्रतिकृति का उपयोग करें या कथन को निर्धारक बनाएं।

  1. - MySQL में स्ट्रिंग और संख्या वाले VARCHAR रिकॉर्ड को कैसे क्रमबद्ध करें?

    MySQL में अल्फान्यूमेरिक कोड (जैसे 100A, 101J) को संख्यात्मक भाग के अनुसार क्रमबद्ध करने के लिए ORDER BY column+0, column तकनीक का उपयोग करें। समस्या स्ट्रिंग क्रम: 100A, 100B, 101J, 101S, 103M (लेक्सिकोग्राफिक) वांछित क्रम: संख्यात्मक भाग पहले, फिर अक्षर उदाहरण mysql> CREATE TABLE DemoTable (S

  1. - MySQL में CASE WHEN से विशिष्ट मान वाली पंक्तियाँ हटाकर बाकी दिखाएँ

    CASE WHEN सिंटैक्स select case when first_name=John then last_name else first_name end Result from demo47 where John in (first_name,last_name); उदाहरण insert into demo47 values(John,Smith), (David,Miller), (John,Doe), (Chris,Brown); क्वेरी और परिणाम +--------+ | Result | +--------+ | Smith |

  1. - Node.js से MySQL रिकॉर्ड हटाना (DELETE FROM)

    डेटाबेस टेबल से रिकॉर्ड हटाने के लिए DELETE FROM स्टेटमेंट उपयोग करें। दो तरीके: स्टैटिक डिलीशन: निश्चित फ़िल्टर मान देकर हटाएं। डायनामिक डिलीशन: इनपुट लेकर उसके आधार पर हटाएं। पूर्वापेक्षा mkdir mysql-test cd mysql-test npm init -y npm install mysql उदाहरण 1: स्टैटिक डिलीशन (address=Delhi) var