समाधान: ROW_COUNT() फ़ंक्शन
अंतिम स्टेटमेंट द्वारा प्रभावित पंक्तियों की संख्या जानने के लिए ROW_COUNT() फ़ंक्शन का उपयोग करें।
सिंटैक्स
DELETE FROM yourTableName WHERE condition; SELECT ROW_COUNT();
व्यावहारिक उदाहरण
टेबल बनाना और डेटा डालना
mysql> CREATE TABLE rowAffectedByDeleteDemo (
-> CustomerId INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
-> CustomerName VARCHAR(20)
-> );
mysql> INSERT INTO rowAffectedByDeleteDemo(CustomerName) VALUES
-> ('John'), ('Carol'), ('Bob'), ('Sam'), ('David'), ('Maxwell'), ('Ramit'), ('James');
DELETE से पहले ROW_COUNT()
mysql> SELECT ROW_COUNT(); +-------------+ | ROW_COUNT() | +-------------+ | -1 | +-------------+
-1 का अर्थ: पिछला स्टेटमेंट SELECT था (कोई पंक्ति प्रभावित नहीं)
DELETE स्टेटमेंट
mysql> DELETE FROM rowAffectedByDeleteDemo
-> WHERE CustomerId = 3 OR CustomerId = 4 OR CustomerId = 5 OR CustomerId = 6;
Query OK, 4 rows affected (0.13 sec)
DELETE के बाद ROW_COUNT()
mysql> SELECT ROW_COUNT(); +-------------+ | ROW_COUNT() | +-------------+ | 4 | +-------------+
4 पंक्तियाँ हटाई गईं (CustomerId 3, 4, 5, 6)
ROW_COUNT() मान
| पिछला स्टेटमेंट | ROW_COUNT() |
|---|---|
| SELECT | -1 |
| INSERT (n पंक्तियाँ) | n |
| UPDATE (n बदली गई) | n |
| DELETE (n हटाई गई) | n |
| REPLACE | प्रभावित पंक्तियाँ |
| DDL (CREATE, ALTER) | 0 |
प्रोग्रामेटिक उपयोग
स्टोर्ड प्रोसीजर में
DELETE FROM orders WHERE order_date < '2020-01-01';
SELECT ROW_COUNT() INTO @deleted_count;
SELECT CONCAT('Deleted ', @deleted_count, ' old orders');
एप्लिकेशन कोड में (PHP PDO)
$stmt = $pdo->exec("DELETE FROM logs WHERE created < DATE_SUB(NOW(), INTERVAL 30 DAY)");
echo "Deleted $stmt rows"; // PDO exec प्रभावित पंक्तियाँ लौटाता है
नोट: MySQL क्लाइंट में
MySQL कमांड लाइन क्लाइंट DELETE के बाद स्वचालित रूप से दिखाता है:
Query OK, 4 rows affected (0.13 sec)
ROW_COUNT() तब उपयोगी है जब आपको प्रोग्रामेटिक रूप से मान चाहिए।