Computer >> कंप्यूटर ट्यूटोरियल >  >> प्रोग्रामिंग >> MySQL

MySQL में स्टोर्ड प्रोसीजर से एक कॉल में दो टेबलों में मान डालें

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) के साथ इवेंट-ड्रिवेन आर्किटेक्चर

सरल बहु-टेबल सम्मिलन के लिए, स्टोर्ड प्रोसीजर एक साफ, एटॉमिक समाधान प्रदान करता है।

  1. - MySQL स्टोर्ड प्रोसीजर में टेबल में डेटा कैसे इन्सर्ट करें?

    MySQL स्टोर्ड प्रोसीजर के अंदर INSERT स्टेटमेंट का उपयोग करके टेबल में डेटा इन्सर्ट कर सकते हैं। पैरामीटर लेकर डायनामिक इन्सर्ट करने वाला प्रोसीजर पुन: उपयोग योग्य और सुरक्षित होता है। सिंटैक्स CREATE PROCEDURE procedure_name(IN param1 TYPE, IN param2 TYPE, ...) BEGIN INSERT INTO table_name (co

  1. - एकल MySQL क्वेरी में एक कॉलम में एकाधिक मान कैसे डालें?

    सिंटैक्स एक कॉलम में एकाधिक मान डालने के लिए, निम्नलिखित सिंटैक्स का उपयोग करें: INSERT INTO yourTableName VALUES (yourValue1), (yourValue2), ... (yourValueN); उदाहरण सबसे पहले एक टेबल बनाते हैं: ); अब INSERT कमांड का उपयोग करके रिकॉर्ड डालें: INSERT INTO DemoTable2022 VALUES (Computer Science)

  1. - MySQL स्टोर्ड प्रोसीजर में डिलीमीटर का सही उपयोग और मान डालना

    समस्या स्टोर्ड प्रोसीजर बनाते समय डिफ़ॉल्ट डिलीमीटर (;) क्वेरी को जल्दी समाप्त कर देता है। समाधान DELIMITER बदलें, प्रोसीजर बनाएं, फिर डिलीमीटर बहाल करें। उदाहरण टेबल बनाएं: ); स्टोर्ड प्रोसीजर बनाएं DELIMITER ; प्रोसीजर कॉल करें CALL insert_name(Chris, Brown); परिणाम +------------------+---