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

क्या हम MySQL में अपने खुद के फंक्शन लिख सकते हैं?

MySQL में कस्टम स्टोर्ड फंक्शन बनाना

हाँ, MySQL आपको CREATE FUNCTION का उपयोग करके अपने खुद के फंक्शन बनाने की अनुमति देता है जिनका उपयोग SQL क्वेरी में किया जा सकता है।

सिंटैक्स

DELIMITER //
CREATE FUNCTION yourFunctionName(parameters) 
RETURNS dataType
DETERMINISTIC
NO SQL
BEGIN
    -- आपके स्टेटमेंट्स
    RETURN result;
END //
DELIMITER ;

महत्वपूर्ण कीवर्ड

कीवर्ड अर्थ
DETERMINISTIC एक ही इनपुट के लिए हमेशा एक ही आउटपुट देता है (ऑप्टिमाइज़ेशन के लिए)
NO SQL फंक्शन में कोई SQL स्टेटमेंट नहीं है
READS SQL DATA फंक्शन डेटा पढ़ता है लेकिन संशोधित नहीं करता
MODIFIES SQL DATA फंक्शन डेटा संशोधित करता है (INSERT/UPDATE/DELETE)

उदाहरण: पहला नाम निकालने वाला फंक्शन

mysql> DELIMITER //
mysql> CREATE FUNCTION get_First_Name(Name VARCHAR(255)) 
    RETURNS VARCHAR(255)
    DETERMINISTIC
    NO SQL
    BEGIN
        RETURN LEFT(Name, LOCATE(' ', Name) - 1);
    END //
Query OK, 0 rows affected (0.20 sec)
mysql> DELIMITER ;

फंक्शन का उपयोग करना

mysql> SELECT get_First_Name('David Miller');
+--------------------------------+
| get_First_Name('David Miller') |
+--------------------------------+
| David                          |
+--------------------------------+
1 row in set, 2 warnings (0.00 sec)

दूसरा उदाहरण: टैक्स कैलकुलेटर

DELIMITER //
CREATE FUNCTION calculate_tax(amount DECIMAL(10,2), tax_rate DECIMAL(5,2))
RETURNS DECIMAL(10,2)
DETERMINISTIC
NO SQL
BEGIN
    RETURN ROUND(amount * tax_rate / 100, 2);
END //
DELIMITER ;
SELECT calculate_tax(1000.00, 18.00) AS GST; -- 180.00

फंक्शन देखना और प्रबंधित करना

-- सभी फंक्शन देखें
SHOW FUNCTION STATUS WHERE Db = 'yourDatabase';

-- फंक्शन की परिभाषा देखें
SHOW CREATE FUNCTION get_First_Name;

-- फंक्शन हटाएं
DROP FUNCTION IF EXISTS get_First_Name;

सीमाएं और सावधानियां

  • फंक्शन डिटरमिनिस्टिक होने चाहिए (या NO SQL/READS SQL DATA घोषित)
  • ट्रांजैक्शन कंट्रोल (COMMIT/ROLLBACK) फंक्शन में नहीं कर सकते
  • फंक्शन स्केलर मान लौटाते हैं, रिजल्ट सेट नहीं
  • रिजल्ट सेट के लिए स्टोर्ड प्रोसीजर उपयोग करें
  • MySQL 8.0+ में CREATE FUNCTION के लिए FUNCTION विशेषाधिकार चाहिए

फंक्शन vs प्रोसीजर

विशेषता फंक्शन प्रोसीजर
रिटर्न मान आवश्यक (स्केलर) वैकल्पिक (OUT पैरामीटर)
SELECT में उपयोग हाँ नहीं (CALL से कॉल करें)
ट्रांजैक्शन नहीं हाँ
रिजल्ट सेट नहीं हाँ
  1. - क्या MySQL में SUM() के साथ IF() उपयोग कर सकते हैं?

    हां, MySQL में SUM() के साथ IF() फ़ंक्शन का उपयोग करके आप सशर्त गिनती या योग गणना कर सकते हैं। यह पिवट टेबल, सशर्त एग्रीगेशन, और क्रॉस-टैब रिपोर्ट के लिए शक्तिशाली तकनीक है। उदाहरण तालिका बनाना CREATE TABLE DemoTable (Value INT, Value2 INT); डेटा डालना INSERT INTO DemoTable VALUES (100, 400), (1

  1. - MySQL में ORDER BY NULL का उपयोग और MySQL 8.0 में इसका व्यवहार

    MySQL में ORDER BY NULL का उपयोग और विभिन्न संस्करणों में इसका व्यवहार। नोट: MySQL 5.7 से पहले, ORDER BY NULL ग्रुपिंग/अन्य ऑपरेशन से अंतर्निहित क्रमबद्धता को दबाने के लिए उपयोगी था। MySQL 8.0+ में, अंतर्निहित क्रमबद्धता व्यवहार बदल गया है और ORDER BY NULL निर्दिष्ट करना अब आवश्यक नहीं है। उदाहरण:

  1. - MySQL में SUM() फंक्शन के परिणाम का WHERE क्लॉज में उपयोग: HAVING क्लॉज का उपयोग करें

    MySQL WHERE vs HAVING: एग्रीगेट फंक्शन के परिणाम पर फ़िल्टर WHERE क्लॉज पंक्तियों को समूहित करने पहले फ़िल्टर करता है, इसलिए इसमें एग्रीगेट फंक्शन (SUM, COUNT, AVG, आदि) उपयोग नहीं कर सकते। एग्रीगेट परिणाम पर फ़िल्टर के लिए HAVING क्लॉज का उपयोग करें। उदाहरण: कुल कीमत 40 से अधिक वाले नाम टेबल बनाएं