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

MySQL के साथ ट्रिगर में तैयार स्टेटमेंट का उपयोग करने का विकल्प

संक्षिप्त उत्तर यह है कि आप TRIGGER में डायनेमिक SQL का उपयोग नहीं कर सकते।

मैं auto_increment मान की क्वेरी से भ्रमित हूं, और आईडी कॉलम के लिए एक मान निर्दिष्ट कर रहा हूं। मुझे समझ में नहीं आता कि आपको आईडी कॉलम का मान सेट करने की आवश्यकता क्यों है। क्या वह कॉलम AUTO_INCREMENT के रूप में परिभाषित नहीं है? डेटाबेस असाइनमेंट को संभालेगा।

यह भी स्पष्ट नहीं है कि आपकी क्वेरी अद्वितीय मान वापस करने की गारंटी है, खासकर जब समवर्ती सम्मिलन चलाए जाते हैं। (मैंने परीक्षण नहीं किया है, इसलिए यह काम कर सकता है।)

लेकिन कोड अजीब है।

ऐसा लगता है कि आप जो हासिल करने की कोशिश कर रहे हैं वह हाल ही में डाली गई पंक्ति से कॉलम का मान प्राप्त करना है। मुझे लगता है कि उसी तालिका से पूछताछ करने पर कुछ प्रतिबंध हैं जिस पर ट्रिगर परिभाषित किया गया है। (मैं निश्चित रूप से जानता हूं कि Oracle में है; MySQL अधिक उदार हो सकता है।)

अगर मुझे ऐसा कुछ करने की ज़रूरत है, तो मैं कुछ ऐसा करने की कोशिश करूंगा:

 SELECT @prev_hash := t.hash AS prev_hash 
   FROM core_Test t
  ORDER BY t.ID DESC LIMIT 1;

 SET NEW.hash = @prev_hash; 

लेकिन फिर, मुझे यकीन नहीं है कि यह काम करेगा (मुझे परीक्षण करने की आवश्यकता होगी)। यदि यह एक साधारण मामले पर काम करता है, तो यह इस बात का प्रमाण नहीं है कि यह हर समय काम करता है, समवर्ती सम्मिलन के मामले में, विस्तारित सम्मिलन के मामले में, आदि।

मैंने क्वेरी को वैसे ही लिखा था जैसे मैंने किया ताकि वह रिवर्स स्कैन ऑपरेशन करने के लिए आईडी कॉलम पर एक इंडेक्स का उपयोग कर सके। यदि यह अनुक्रमणिका का उपयोग नहीं करता है, तो मैं उस क्वेरी को फिर से लिखने का प्रयास करूंगा (संभवतः जॉइन के रूप में, सर्वोत्तम संभव प्रदर्शन प्राप्त करने के लिए।

 SELECT @prev_hash := t.hash AS prev_hash
   FROM ( SELECT r.ID FROM core_Test r ORDER BY r.ID DESC LIMIT 1 ) s
   JOIN core_Test t
     ON t.ID = s.ID

MySQL 5.1 संदर्भ मैनुअल से अंश
E.1 संग्रहीत प्रोग्राम पर प्रतिबंध




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. .NET और MySQL त्रुटि - SSPI को कॉल विफल ... प्राप्त संदेश अप्रत्याशित या बुरी तरह से स्वरूपित था और फ़ंक्शन को दिए गए बफ़र्स बहुत छोटे थे

  2. MySQL स्टोर संबंध (परिवार) ट्री

  3. डेटाबेस में क्रमबद्ध करने के बाद वस्तु को क्रमबद्ध नहीं किया जा सकता है

  4. एसक्यूएल सर्वर 2008 में अंतिम डाली गई आईडी प्राप्त करें

  5. अन्य तालिकाओं पर निर्देशांक चुनें