MySQL में एक स्टोर्ड प्रोसीजर बनाकर, एक ही CALL से दो (या अधिक) टेबलों में मान डाल सकते हैं। यह ट्रांजैक्शनल अखंडता सुनिश्चित करता है, कोड पुनरावृत्ति कम करता है, और एप्लिकेशन लॉजिक सरल करता है।
सिंटैक्स
DELIMITER //
CREATE PROCEDURE procedure_name(IN param_name TYPE)
BEGIN
INSERT INTO table1 (col1) VALUES (param_name);
INSERT INTO table2 (col2) VALUES (param_name);
END //
DELIMITER ;
व्यावहारिक उदाहरण
दो टेबल बनाएं:
mysql> CREATE TABLE DemoTable1 (StudentScore INT); mysql> CREATE TABLE DemoTable2 (PlayerScore INT);
स्टोर्ड प्रोसीजर बनाएं
mysql> DELIMITER //
mysql> CREATE PROCEDURE insert_proc(IN value INT)
-> BEGIN
-> INSERT INTO DemoTable1(StudentScore) VALUES(value);
-> INSERT INTO DemoTable2(PlayerScore) VALUES(value);
-> END
-> //
Query OK, 0 rows affected (0.16 sec)
mysql> DELIMITER ;
प्रोसीजर कॉल करें
mysql> CALL insert_proc(89);
Query OK, 1 row affected (0.29 sec)
दोनों टेबल जांचें
mysql> SELECT * FROM DemoTable1; mysql> SELECT * FROM DemoTable2;
+--------------+ +-------------+ | StudentScore | | PlayerScore | +--------------+ +-------------+ | 89 | | 89 | +--------------+ +-------------+
मुख्य बिंदु
DELIMITER //- स्टेटमेंट डिलीमीटर अस्थायी रूप से बदलता है ताकि प्रोसीजर बॉडी में;उपयोग कर सकेंIN value INT- इनपुट पैरामीटर- दोनों
INSERTएक ही ट्रांजैक्शन में चलते हैं (यदि ऑटोकमिट बंद है) DELIMITER ;- डिलीमीटर वापस बहाल करें
ट्रांजैक्शन नियंत्रण जोड़ें (स्पष्ट)
CREATE PROCEDURE insert_proc(IN value INT)
BEGIN
DECLARE EXIT HANDLER FOR SQLEXCEPTION
BEGIN
ROLLBACK;
RESIGNAL;
END;
START TRANSACTION;
INSERT INTO DemoTable1(StudentScore) VALUES(value);
INSERT INTO DemoTable2(PlayerScore) VALUES(value);
COMMIT;
END
एकाधिक पैरामीटर
CREATE PROCEDURE insert_student_score(
IN p_student_id INT,
IN p_score INT,
IN p_player_score INT
)
BEGIN
INSERT INTO student_scores(student_id, score) VALUES(p_student_id, p_score);
INSERT INTO player_scores(player_id, score) VALUES(p_student_id, p_player_score);
END
आउटपुट पैरामीटर
CREATE PROCEDURE insert_and_get_id(IN val INT, OUT new_id INT)
BEGIN
INSERT INTO DemoTable1(StudentScore) VALUES(val);
SET new_id = LAST_INSERT_ID();
END
लाभ
- एटॉमिसिटी: दोनों INSERT एक साथ सफल या असफल होते हैं
- नेटवर्क राउंड-ट्रिप: एक CALL बनाम कई क्वेरी
- व्यावसायिक तर्क केंद्रीकरण: नियम डेटाबेस में, एप्लिकेशन में नहीं
- सुरक्षा: टेबल पर सीधे INSERT अधिकार नहीं, केवल EXECUTE प्रोसीजर पर
सावधानियां
- स्टोर्ड प्रोसीजर डिबग करना कठिन होता है
- संस्करण नियंत्रण (Git) में ट्रैक करना मुश्किल
- अत्यधिक जटिल तर्क के लिए एप्लिकेशन लेयर बेहतर
- MySQL स्टोर्ड प्रोसीजर अन्य DB की तुलना में कम शक्तिशाली
आधुनिक विकल्प
- एप्लिकेशन लेयर में ट्रांजैक्शन प्रबंधन
- माइक्रोसर्विस में सागा पैटर्न
- CDC (Change Data Capture) के साथ इवेंट-ड्रिवेन आर्किटेक्चर
सरल बहु-टेबल सम्मिलन के लिए, स्टोर्ड प्रोसीजर एक साफ, एटॉमिक समाधान प्रदान करता है।