MySQL में STORED PROCEDURE का उपयोग करके आप एक ही कॉल में दो (या अधिक) तालिकाओं में डेटा डाल सकते हैं। यह लेनदेन स्थिरता सुनिश्चित करता है और एप्लिकेशन कोड को सरल बनाता है।
दो तालिकाएं बनाना
mysql> CREATE TABLE DemoTable (
StudentId INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
StudentFirstName VARCHAR(20)
);
mysql> CREATE TABLE DemoTable2 (
ClientId INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
ClientName VARCHAR(20),
ClientAge INT
);
स्टोर्ड प्रोसीजर बनाना
mysql> DELIMITER //
mysql> CREATE PROCEDURE insert_into_twoTables(name VARCHAR(100), age INT)
-> BEGIN
-> INSERT INTO DemoTable (StudentFirstName) VALUES (name);
-> INSERT INTO DemoTable2 (ClientName, ClientAge) VALUES (name, age);
-> END //
mysql> DELIMITER ;
स्टोर्ड प्रोसीजर कॉल करना
mysql> CALL insert_into_twoTables('Tom', 38);
आउटपुट: Query OK, 1 row affected, 1 warning (0.41 sec)
दोनों तालिकाओं में डेटा सत्यापित करना
mysql> SELECT * FROM DemoTable;
आउटपुट:
+-----------+------------------+ | StudentId | StudentFirstName | +-----------+------------------+ | 1 | Tom | +-----------+------------------+
mysql> SELECT * FROM DemoTable2;
आउटपुट:
+----------+------------+-----------+ | ClientId | ClientName | ClientAge | +----------+------------+-----------+ | 1 | Tom | 38 | +----------+------------+-----------+
व्याख्या: स्टोर्ड प्रोसीजर पैरामीटर स्वीकार करता है और दो INSERT स्टेटमेंट निष्पादित करता है। DELIMITER बदलना आवश्यक है ताकि प्रोसीजर बॉडी में सेमीकॉलन को स्टेटमेंट अंत न माना जाए।
बेहतर अभ्यास: उत्पादन में, लेनदेन नियंत्रण जोड़ें:
CREATE PROCEDURE insert_into_twoTables(name VARCHAR(100), age INT)
BEGIN
DECLARE EXIT HANDLER FOR SQLEXCEPTION
BEGIN
ROLLBACK;
RESIGNAL;
END;
START TRANSACTION;
INSERT INTO DemoTable (StudentFirstName) VALUES (name);
INSERT INTO DemoTable2 (ClientName, ClientAge) VALUES (name, age);
COMMIT;
END