ORDER BY ... LIMIT के साथ UPDATE
MySQL UPDATE स्टेटमेंट में ORDER BY और LIMIT क्लॉज सपोर्ट करता है, जिससे विशिष्ट क्रम में सीमित संख्या में पंक्तियों को अपडेट किया जा सकता है।
उदाहरण: टेबल बनाना और डेटा इन्सर्ट करना
mysql> CREATE TABLE DemoTable824(
Id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
ClientName VARCHAR(100),
ClientAge INT
);
Query OK, 0 rows affected (0.56 sec)
रिकॉर्ड्स इन्सर्ट करना
mysql> INSERT INTO DemoTable824(ClientName,ClientAge) VALUES
('Chris',23),('Robert',26),('Bob',24),('David',27);
Query OK, 4 rows affected (...)
सभी रिकॉर्ड्स देखना
mysql> SELECT * FROM DemoTable824;
+----+------------+-----------+ | Id | ClientName | ClientAge | +----+------------+-----------+ | 1 | Chris | 23 | | 2 | Robert | 26 | | 3 | Bob | 24 | | 4 | David | 27 | +----+------------+-----------+ 4 rows in set (0.00 sec)
अंतिम रो (उच्चतम ID) अपडेट करने की क्वेरी
mysql> UPDATE DemoTable824
SET ClientName = 'Adam', ClientAge = 28
ORDER BY Id DESC LIMIT 1;
Query OK, 1 row affected (0.20 sec)
Rows matched: 1 Changed: 1 Warnings: 0
अपडेट के बाद डेटा देखना
mysql> SELECT * FROM DemoTable824;
+----+------------+-----------+ | Id | ClientName | ClientAge | +----+------------+-----------+ | 1 | Chris | 23 | | 2 | Robert | 26 | | 3 | Bob | 24 | | 4 | Adam | 28 | +----+------------+-----------+ 4 rows in set (0.00 sec)
क्वेरी व्याख्या
ORDER BY Id DESC- उच्चतम ID (अंतिम इन्सर्ट की गई पंक्ति) पहलेLIMIT 1- केवल पहली पंक्ति (यानी अंतिम) अपडेट करें- बिना WHERE क्लॉज के, लेकिन ORDER BY + LIMIT के साथ सुरक्षित
सामान्य उपयोग के मामले
- सबसे हाल का ऑर्डर/लेनदेन अपडेट करना
- नवीनतम लॉग एंट्री संशोधित करना
- सबसे नए रिकॉर्ड पर फ्लैग सेट करना
- लेटेस्ट वर्जन रिकॉर्ड अपडेट करना
विशिष्ट ID की अंतिम एंट्री (पार्टीशन द्वारा)
यदि एक ही ID की कई पंक्तियां हैं (उदाहरण: लॉग टेबल):
UPDATE LogTable SET Status = 'Processed' WHERE UserId = 123 ORDER BY LogTime DESC LIMIT 1;
सबक्वेरी अल्टरनेटिव (अधिक पोर्टेबल)
UPDATE DemoTable824 SET ClientName = 'Adam', ClientAge = 28 WHERE Id = (SELECT Id FROM DemoTable824 ORDER BY Id DESC LIMIT 1);
अन्य LIMIT पैटर्न
-- अंतिम 3 रो अपडेट करें UPDATE DemoTable824 SET Status = 'Recent' ORDER BY Id DESC LIMIT 3; -- सबसे पुरानी 2 रो हटाएं DELETE FROM DemoTable824 ORDER BY Id ASC LIMIT 2;
चेतावनी
ORDER BY ... LIMITके साथUPDATE/DELETEMySQL-विशिष्ट है- रिप्लिकेशन में स्टेटमेंट-आधारित लॉगिंग के साथ नॉन-डिटरमिनिस्टिक हो सकता है
- ROW-आधारित रिप्लिकेशन अनुशंसित
- सुरक्षित अपडेट मोड (
SQL_SAFE_UPDATES) इसे ब्लॉक कर सकता है