MySQL स्टोर्ड प्रोसीजर में पैरामीटरीकृत DELETE
स्टोर्ड प्रोसीजर इनपुट पैरामीटर स्वीकार करके पुन: प्रयोज्य, सुरक्षित DELETE संचालन को सक्षम करते हैं। यह SQL इंजेक्शन को रोकता है और कोड पुन: उपयोग को बढ़ावा देता है।
उदाहरण: पैरामीटरीकृत DELETE प्रोसीजर
mysql> CREATE TABLE DemoTable1464 (
-> Id INT,
-> FirstName VARCHAR(20)
-> );
Query OK, 0 rows affected (0.51 sec)
mysql> INSERT INTO DemoTable1464 VALUES (101, 'Chris Brown'), (102, 'John Doe');
Query OK, 2 rows affected (0.11 sec)
mysql> SELECT * FROM DemoTable1464;
+------+-------------+
| Id | FirstName |
+------+-------------+
| 101 | Chris Brown |
| 102 | John Doe |
+------+-------------+
2 rows in set (0.00 sec)
DELETE प्रोसीजर बनाएं
mysql> DELIMITER //
mysql> CREATE PROCEDURE delete_demo(IN local_Id INT, IN local_Name VARCHAR(20))
-> BEGIN
-> DELETE FROM DemoTable1464
-> WHERE Id = local_Id AND FirstName = local_Name;
-> END //
Query OK, 0 rows affected (0.24 sec)
mysql> DELIMITER ;
प्रोसीजर कॉल करें
mysql> CALL delete_demo(102, 'John Doe'); Query OK, 1 row affected, 1 warning (0.11 sec)
सत्यापन
mysql> SELECT * FROM DemoTable1464; +------+-------------+ | Id | FirstName | +------+-------------+ | 101 | Chris Brown | +------+-------------+ 1 row in set (0.00 sec)
मुख्य लाभ
- पैरामीटरीकरण: SQL इंजेक्शन रोकता है
- पुन: उपयोग: अलग-अलग मानों के साथ कई बार कॉल करें
- एनकैप्सुलेशन: DELETE तर्क छुपाता है
- लेन-देन: बड़े संचालन के लिए BEGIN/COMMIT/ROLLBACK जोड़ सकते हैं
उन्नत: प्रभावित पंक्तियों के साथ DELETE प्रोसीजर
CREATE PROCEDURE safe_delete(IN p_id INT, IN p_name VARCHAR(20), OUT p_affected INT)
BEGIN
DELETE FROM DemoTable1464 WHERE Id = p_id AND FirstName = p_name;
SET p_affected = ROW_COUNT();
IF p_affected = 0 THEN
SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = 'No matching record found';
END IF;
END;
सुरक्षा सर्वोत्तम अभ्यास
- हमेशा WHERE क्लॉज का उपयोग करें (आकस्मिक पूर्ण-टेबल डिलीट रोकता है)
- उत्पादन में सॉफ्ट डिलीट (is_deleted फ्लैग) पर विचार करें
- महत्वपूर्ण डेटा के लिए ऑडिट लॉगिंग जोड़ें
SQL_SAFE_UPDATES = 1सेट करें (WHERE के बिना UPDATE/DELETE रोकता है)