MySQL UPDATE का व्यवहार समान मानों के साथ
नहीं, MySQL UPDATE समान मान होने पर उन्हें ओवरराइट नहीं करता। यदि नया मान मौजूदा मान के समान है, तो MySQL उस पंक्ति को "बदला हुआ" नहीं मानता।
आइए पहले एक टेबल बनाते हैं:
mysql> CREATE TABLE DemoTable (
StudentId INT,
StudentMathMarks INT,
StudentMySQLMarks INT
);
रिकॉर्ड्स इन्सर्ट करें:
mysql> INSERT INTO DemoTable VALUES (1, 56, 78); mysql> INSERT INTO DemoTable VALUES (2, 88, 99); mysql> INSERT INTO DemoTable VALUES (3, 34, 98);
सभी रिकॉर्ड्स देखें:
mysql> SELECT * FROM DemoTable;
आउटपुट:
+-----------+------------------+-------------------+ | StudentId | StudentMathMarks | StudentMySQLMarks | +-----------+------------------+-------------------+ | 1 | 56 | 78 | | 2 | 88 | 99 | | 3 | 34 | 98 | +-----------+------------------+-------------------+
उन मानों के साथ अपडेट करने का प्रयास करें जो पहले से मौजूद हैं (StudentId 2 के लिए Math 88 और MySQL 99):
mysql> UPDATE DemoTable
SET StudentId = 2, StudentMathMarks = 88, StudentMySQLMarks = 99
WHERE StudentId = 2;
आउटपुट:
Query OK, 0 rows affected (0.00 sec) Rows matched: 1 Changed: 0 Warnings: 0
व्याख्या:
- Rows matched: 1 - WHERE क्लॉज से 1 पंक्ति मेल खाई
- Changed: 0 - लेकिन 0 पंक्तियां वास्तव में बदली गईं क्योंकि सभी मान समान थे
- 0 rows affected - यही दर्शाता है कि UPDATE समान मानों को ओवरराइट नहीं करता
व्यावहारिक प्रभाव:
- ट्रिगर्स (AFTER UPDATE) केवल तब फायर होते हैं जब पंक्ति वास्तव में बदलती है
- बाइनरी लॉगिंग में अनावश्यक लिखावट नहीं होती
- प्रदर्शन थोड़ा बेहतर होता है क्योंकि डिस्क राइट नहीं होती
ROW_COUNT()केवल वास्तव में बदली गई पंक्तियों की संख्या लौटाता है
नोट: यह व्यवहार MySQL-विशिष्ट है। कुछ अन्य डेटाबेस (जैसे PostgreSQL) समान मानों पर भी पंक्ति को "अपडेटेड" मान सकते हैं।