Mysql
 sql >> डेटाबेस >  >> RDS >> Mysql

MySQL संग्रहीत कार्यविधियाँ बनाना और उनका उपयोग करना - एक ट्यूटोरियल

संग्रहीत कार्यविधियाँ उपयोगकर्ता द्वारा परिभाषित SQL कथन हैं जो एक MySQL डेटाबेस में संग्रहीत होते हैं और एक विशिष्ट डेटाबेस ऑपरेशन करने के लिए ऑन-डिमांड निष्पादित होते हैं। ये पूर्वनिर्धारित सबरूटीन्स व्यावसायिक तर्क को डेटाबेस में ले जाने में मदद करते हैं, जो कुछ लाभ प्रदान करता है:

  • किसी एप्लिकेशन द्वारा डेटाबेस सर्वर पर किए गए राउंड ट्रिप कम से कम किए जाते हैं।
  • कोड अनुरक्षण क्षमता को बढ़ाया जाता है, क्योंकि विभिन्न एप्लिकेशन संग्रहीत कार्यविधि को साझा कर सकते हैं।
  • डेटाबेस के प्रदर्शन में सुधार हुआ है, क्योंकि संग्रहित प्रक्रियाओं को एक बार संकलित किया जाता है और बहुत जल्दी और कुशलता से निष्पादित किया जाता है।

इस गाइड में, आप:

  • संग्रहीत कार्यविधियाँ बनाने के लिए वाक्य रचना सीखें, और अपनी पहली प्रक्रिया घोषित करें।

  • उदाहरण प्रक्रिया को घोषित करने के बाद निष्पादित करें।

  • जानें कि जब आपको किसी प्रक्रिया की अब आवश्यकता नहीं है तो उसे कैसे हटाया जाए।

शुरू करने से पहले

सुनिश्चित करें कि आपके पास निम्नलिखित हैं:

  1. यदि आपने पहले से ऐसा नहीं किया है, तो एक लिनोड खाता बनाएं और उदाहरण की गणना करें। लिनोड के साथ शुरुआत करना और कंप्यूट इंस्टेंस गाइड बनाना देखें।

  2. अपने सिस्टम को अपडेट करने के लिए कंप्यूट इंस्टेंस गाइड की स्थापना और सुरक्षा का पालन करें। आप समय क्षेत्र सेट करना, अपना होस्टनाम कॉन्फ़िगर करना, एक सीमित उपयोगकर्ता खाता बनाना और SSH पहुंच को सख्त करना भी चाह सकते हैं।

  3. लाइनोड सर्वर पर स्थापित एक MySQL सर्वर और क्लाइंट। MySQL के लिए इंस्टॉलेशन गाइड हमारे MySQL सेक्शन में विभिन्न वितरणों के लिए उपलब्ध हैं।

डेटाबेस तैयार करें

आप डेटाबेस तक पहुँचने के लिए एक नमूना डेटाबेस, तालिका और उपयोगकर्ता बनाकर शुरू करेंगे। आप परीक्षण उद्देश्यों के लिए नमूना डेटा के साथ तालिका को भी भरेंगे।

डेटाबेस, टेबल और उपयोगकर्ता बनाना

  1. MySQL सर्वर में लॉग इन करें:

     mysql -u root -p
    

    आपको अपने MySQL डेटाबेस का रूट पासवर्ड दर्ज करने के लिए प्रेरित किया जाएगा। फिर, दर्ज करें . दबाएं जारी रखने के लिए।

  2. इसके बाद, आपको नीचे दिखाए गए के समान एक MySQL प्रॉम्प्ट दिखाई देगा।

    mysql >
  3. test_db create बनाने के लिए नीचे दी गई कमांड दर्ज करें डेटाबेस:

    CREATE DATABASE test_db;
    

    आउटपुट:

    Query OK, 1 row affected (0.01 sec)
  4. एक डेटाबेस उपयोगकर्ता बनाएं और test_db . तक पूर्ण पहुंच प्रदान करें डेटाबेस। PASSWORD बदलें एक जटिल और अद्वितीय मूल्य के साथ जो MySQL पासवर्ड के लिए दिशानिर्देशों का पालन करता है:

    CREATE USER 'test_user'@'localhost' IDENTIFIED BY 'PASSWORD';
    

    आउटपुट:

    Query OK, 1 row affected (0.01 sec)
  5. test_user प्रदान करें test_db . को पूर्ण विशेषाधिकार डेटाबेस;

    GRANT ALL PRIVILEGES ON test_db.* TO 'test_user'@'localhost';
    

    आउटपुट:

    Query OK, 1 row affected (0.01 sec)
  6. फ्लश विशेषाधिकार:

    FLUSH PRIVILEGES;
    

    आउटपुट:

    Query OK, 0 rows affected (0.01 sec)

डेटाबेस को पॉप्युलेट करें

  1. इसके बाद, test_db डेटाबेस पर स्विच करें:

    USE test_db;
    

    आउटपुट:

    Database changed
  2. एक products बनाएं नमूना रिकॉर्ड संग्रहीत करने के लिए तालिका:

    CREATE TABLE products(product_id BIGINT PRIMARY KEY, product_name VARCHAR(50), category_name VARCHAR(50) ) ENGINE=INNODB;
    

    आउटपुट:

    Query OK, 0 rows affected (0.01 sec)
  3. अब आप नीचे दिए गए आदेशों को एक-एक करके निष्पादित करके उत्पाद तालिका में कुछ उत्पाद जोड़ सकते हैं:

    INSERT INTO products (product_id, product_name, category_name) VALUES ('1', 'GAMING KEYBOARD', 'COMPUTER ACCESSORIES');
    INSERT INTO products (product_id, product_name, category_name) VALUES ('2', 'OPTICAL MOUSE', 'COMPUTER ACCESSORIES');
    INSERT INTO products (product_id, product_name, category_name) VALUES ('3', 'MOUSE PAD', 'COMPUTER ACCESSORIES');
    INSERT INTO products (product_id, product_name, category_name) VALUES ('4', 'STEREO SYSTEM', 'ELECTRONICS');
    INSERT INTO products (product_id, product_name, category_name) VALUES ('5', '32 INCH TV', 'ELECTRONICS');
    INSERT INTO products (product_id, product_name, category_name) VALUES ('6', 'DVB-T2 RECEIVER', 'ELECTRONICS');
    

    प्रत्येक Insert . को क्रियान्वित करने के बाद आपको निम्न आउटपुट प्राप्त करना चाहिए कथन:

    Query OK, 1 row affected (0.00 sec)
  4. अगला। पुष्टि करें कि Select . चलाकर नमूना उत्पादों को सफलतापूर्वक डेटाबेस में डाला गया था या नहीं नीचे आदेश:

    SELECT * FROM products;
    

    आपके नमूना उत्पादों को नीचे दिखाए अनुसार सूचीबद्ध किया जाना चाहिए:

    +------------+-----------------+----------------------+
    | product_id | product_name    | category_name        |
    +------------+-----------------+----------------------+
    |          1 | GAMING KEYBOARD | COMPUTER ACCESSORIES |
    |          2 | OPTICAL MOUSE   | COMPUTER ACCESSORIES |
    |          3 | MOUSE PAD       | COMPUTER ACCESSORIES |
    |          4 | STEREO SYSTEM   | ELECTRONICS          |
    |          5 | 32 INCH TV      | ELECTRONICS          |
    |          6 | DVB-T2 RECEIVER | ELECTRONICS          |
    +------------+-----------------+----------------------+
    6 rows in set (0.00 sec)
  5. MySQL सर्वर से बाहर निकलें।

    QUIT;
    

    आउटपुट:

    Bye!
  6. एक बार जब आप एक test_db बना लेते हैं डेटाबेस, products तालिका, एक test_user , और कुछ नमूना उत्पादों को जोड़ा, अब आप पहली संग्रहित प्रक्रिया बनाने के लिए आगे बढ़ सकते हैं।

संग्रहीत प्रक्रिया बनाना

संग्रहीत प्रक्रिया सिंटैक्स

MySQL डेटाबेस में संग्रहीत कार्यविधि बनाने का मूल सिंटैक्स नीचे दिखाया गया है:

DELIMITER &&
CREATE PROCEDURE PROCEDURE_NAME (PARAMETER_1, PARAMETER_2, PARAMETER_N...)
BEGIN
[SQL STATEMENT]
END &&
DELIMITER ;
  • DELIMITER && शुरुआत में लाइन MySQL सर्वर को निम्नलिखित SQL कथनों को व्यक्तिगत रूप से निष्पादित करने के बजाय एक ही कथन के रूप में मानने के लिए कहती है। एक और && इस कथन के अंत को चिह्नित करने के लिए बाद की पंक्ति में शामिल किया गया है।

  • PROCEDURE_NAME वह जगह है जहां आपकी संग्रहीत कार्यविधि का नाम घोषित किया जाता है।

  • प्रक्रिया के नाम के बाद कोष्ठकों का एक सेट होता है, और ये आपकी प्रक्रिया में पैरामीटर संलग्न करते हैं। संग्रहीत कार्यविधियाँ अल्पविराम से अलग किए गए मापदंडों का समर्थन करती हैं, और यह सुविधा उन्हें अधिक लचीला बनाती है। अधिक विवरण के लिए पैरामीटर अनुभाग देखें।

  • BEGIN...END आदेश SQL कथन को संलग्न करते हैं जिसे आप संग्रहीत कार्यविधि द्वारा निष्पादित करना चाहते हैं।

  • अंत में, कथन DELIMITER ; डिलीमीटर को वापस ; . के डिफ़ॉल्ट मान में बदलने के लिए फिर से जारी किया जाता है

संग्रहीत प्रक्रिया पैरामीटर

एक प्रक्रिया के लिए प्रत्येक पैरामीटर में एक प्रकार, नाम और एक डेटा प्रकार होता है, जिसे रिक्त स्थान से अलग किया जाता है:

PARAMETER_TYPE PARAMETER_NAME DATA_TYPE

उदाहरण के लिए, IN . प्रकार का पैरामीटर बनाने के लिए , नाम category , VARCHAR . के साथ डेटा प्रकार जिसकी लंबाई 50 . है वर्ण, इस सिंटैक्स का उपयोग करें:

IN category VARCHAR(50)

MySQL तीन प्रकार के मापदंडों का समर्थन करता है:

  • IN :पैरामीटर का मान कॉलिंग क्लाइंट द्वारा निर्दिष्ट किया जाना चाहिए। इस मान को संग्रहीत कार्यविधि द्वारा बदला नहीं जा सकता

    उदाहरण के लिए, यदि आप aMySQL सत्र चर को IN . के रूप में पास करते हैं एक प्रक्रिया के लिए पैरामीटर, और प्रक्रिया अपने बयानों में इस मान को संशोधित करती है, प्रक्रिया समाप्त होने के बाद आपका सत्र चर अपरिवर्तित रहेगा।

  • OUT :इस प्रकार के पैरामीटर को कॉलिंग प्रोग्राम द्वारा भी निर्दिष्ट किया जाता है, लेकिन इसका मान संग्रहीत प्रक्रिया द्वारा बदला जा सकता है और कॉलिंग प्रोग्राम द्वारा पुनर्प्राप्त किया जा सकता है।

    ध्यान दें कि संग्रहीत कार्यविधि OUT . के रूप में पारित चर के प्रारंभिक मान तक नहीं पहुंच सकती है पैरामीटर।

  • INOUT :इस प्रकार का एक पैरामीटर IN . के व्यवहार को जोड़ता है और OUT पैरामीटर:

    • संग्रहीत कार्यविधि पैरामीटर के प्रारंभिक मान को पढ़ सकती है।

    • संग्रहीत कार्यविधि निष्पादन के दौरान पैरामीटर को बदला जा सकता है।

    • बदले हुए मान को कॉलिंग प्रोग्राम में वापस किया जा सकता है, अगर कॉलिंग प्रोग्राम ने एक वैरिएबल को पैरामीटर के रूप में पास किया है।

एक उदाहरण संग्रहित प्रक्रिया

मूल सिंटैक्स को समझने के बाद, श्रेणी के नाम से उत्पादों को फ़िल्टर करने के लिए एक सरल संग्रहीत कार्यविधि बनाते हैं। श्रेणी का नाम IN . के रूप में दिया जाएगा पैरामीटर।

  1. test_user . का उपयोग करके MySQL सर्वर में लॉग इन करें डेटाबेस तैयार करते समय आपके द्वारा बनाए गए क्रेडेंशियल:

     mysql -u test_user -p
    
  2. test_user . का पासवर्ड दर्ज करें और दर्ज करें . दबाएं जारी रखने के लिए।

  3. आपको एक mysql > . मिलेगा संकेत देना। test_db . का चयन करके आगे बढ़ें :

     USE test_db;
    

    आउटपुट:

    Database changed.
  4. फिर, filter_by_category . बनाने के लिए नीचे SQL कमांड दर्ज करें संग्रहित प्रक्रिया:

     DELIMITER &&
     CREATE PROCEDURE filter_by_category (IN category VARCHAR(50))
     BEGIN
     SELECT * FROM products WHERE category_name=category;
     END &&
    

    आउटपुट:

    Query OK, 0 rows affected (0.00 sec)
  5. DELIMITER बदलें ; . पर वापस जाएं

    DELIMITER ;
    
  6. यदि संग्रहीत कार्यविधि बनाने के लिए कोड सफलतापूर्वक चला, तो अब आप संग्रहीत कार्यविधि को निष्पादित करने के लिए आगे बढ़ सकते हैं।

संग्रहीत कार्यविधि निष्पादित करना

इस चरण में, हम ऊपर बनाई गई संग्रहीत प्रक्रिया को कॉल करेंगे। हम इस बुनियादी सिंटैक्स का पालन करेंगे:

CALL PROCEDURE_NAME (COMMA-SEPARATED PARAMETER VALUES);
  • filter_by_category को निष्पादित करने के लिए संग्रहीत प्रक्रिया जिसे हमने ऊपर बनाया है, नीचे कमांड दर्ज करें:

    CALL filter_by_category('COMPUTER ACCESSORIES');
    

    संग्रहीत कार्यविधि अब सभी उत्पादों को COMPUTER ACCESSORIES . में आउटपुट करना चाहिए श्रेणी क्योंकि हमने COMPUTER ACCESSORIES . निर्दिष्ट किया है एक पैरामीटर के रूप में:

    +------------+-----------------+----------------------+
    | product_id | product_name    | category_name        |
    +------------+-----------------+----------------------+
    |          1 | GAMING KEYBOARD | COMPUTER ACCESSORIES |
    |          2 | OPTICAL MOUSE   | COMPUTER ACCESSORIES |
    |          3 | MOUSE PAD       | COMPUTER ACCESSORIES |
    +------------+-----------------+----------------------+
    3 rows in set (0.00 sec)
    
    Query OK, 0 rows affected (0.01 sec)
  • इसी तरह, आप ELECTRONICS . से सभी उत्पादों की सूची प्राप्त कर सकते हैं नीचे दिए गए आदेश को क्रियान्वित करके श्रेणी।

    CALL filter_by_category('ELECTRONICS') ;
    

    आउटपुट:

    +------------+-----------------+---------------+
    | product_id | product_name    | category_name |
    +------------+-----------------+---------------+
    |          4 | STEREO SYSTEM   | ELECTRONICS   |
    |          5 | 32 INCH TV      | ELECTRONICS   |
    |          6 | DVB-T2 RECEIVER | ELECTRONICS   |
    +------------+-----------------+---------------+
    3 rows in set (0.00 sec)
    
    Query OK, 0 rows affected (0.01 sec)

हमारी संग्रहीत प्रक्रिया ने हमारी अपेक्षा के अनुरूप काम किया। इसके बाद, हम सीखेंगे कि यदि हम संग्रहीत कार्यविधियों को फिर से निष्पादित नहीं करना चाहते हैं, तो उन्हें कैसे छोड़ा जाए।

संग्रहीत कार्यविधियों को हटाना

यदि आप अब इसका उपयोग नहीं करना चाहते हैं या यदि आप इसे स्क्रैच से फिर से बनाना चाहते हैं तो आप एक MySQL संग्रहीत कार्यविधि को हटा सकते हैं। संग्रहीत कार्यविधि को छोड़ने का मूल सिंटैक्स नीचे दिखाया गया है:

DROP PROCEDURE IF EXISTS PROCEDURE_NAME;

उदाहरण के लिए, हमारी filter_by_category को मिटाने के लिए संग्रहीत कार्यविधि, नीचे MySQL कमांड निष्पादित करें:

DROP PROCEDURE IF EXISTS filter_by_category;

यदि संग्रहीत कार्यविधि मौजूद है, तो आपको नीचे दिखाया गया आउटपुट मिलेगा:

Query OK, 0 rows affected (0.00 sec)

MySQL संग्रहीत कार्यविधियों को बनाने, उपयोग करने और छोड़ने की बात आती है।

अधिक जानकारी

आप इस विषय पर अतिरिक्त जानकारी के लिए निम्नलिखित संसाधनों से परामर्श करना चाह सकते हैं। हालांकि ये इस उम्मीद में प्रदान किए जाते हैं कि वे उपयोगी होंगे, कृपया ध्यान दें कि हम बाहरी रूप से होस्ट की गई सामग्री की सटीकता या समयबद्धता की पुष्टि नहीं कर सकते।

  • MySQL संग्रहीत कार्यविधियों के साथ कार्य करना

  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. उन पंक्तियों को कैसे वापस करें जिनमें MySQL में समान कॉलम मान हैं

  2. MySQL में SOUNDS LIKE ऑपरेटर कैसे काम करता है

  3. मैं mysql में कैस्केड को हटाने पर कैसे उपयोग करूं?

  4. एक कॉलम के MySql योग तत्व

  5. SQL ALTER TABLE सिंटैक्स - DBMS द्वारा सूचीबद्ध