2009-10-12 9 views
16

मैंने बैकटिक्स के साथ MYSQL क्वेरीज़ का निर्माण किया है। उदाहरण के लिए,mysql प्रश्नों के लिए बैकक्वॉट/बैकटिक्स का उपयोग

SELECT `title` FROM `table` WHERE (`id` = 3) 

के विपरीत:

SELECT title FROM table WHERE (id = 3) 

मुझे लगता है मैं phpMyAdmin निर्यात से इस अभ्यास गया, और मैं क्या समझ में आ से, यहां तक ​​कि रेल इस तरह अपने प्रश्नों उत्पन्न करता है।

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

मैं यह जानना चाहता था कि एसक्यूएल (मेरे मामले में MySQL) व्याख्या गति आदि जैसे अन्य प्रभाव हैं या नहीं। आपको क्या लगता है?

उत्तर

16

बैकटीक्स टेबल/कॉलम नामों में रिक्त स्थान और अन्य विशेष पात्रों (बैकटिक्स को छोड़कर) को अनुमति देता है। वे सख्ती से जरूरी नहीं हैं बल्कि सुरक्षा के लिए एक अच्छा विचार हैं।

यदि आप टेबल नामकरण के लिए समझदार नियमों का पालन करते हैं और कॉलम बैकटिक्स अनावश्यक होना चाहिए।

+0

'date' नहीं एक समझदार स्तंभ नाम है? –

+0

'date' उन लोगों में से एक है जो समझदार लगता है, लेकिन एक MySQL आरक्षित शब्द है। MySQL आरक्षित शब्द यहां सूचीबद्ध हैं: https://dev.mysql.com/doc/refman/5.5/en/keywords.html – Tenner

+0

@ टेंनर, बैकटिक से बचने के लिए कैसे? –

2

अच्छा, अगर आप सुनिश्चित करते हैं कि आप गलती से किसी पहचानकर्ता के रूप में किसी कीवर्ड का उपयोग नहीं करते हैं, तो आपको बैकटीक्स की आवश्यकता नहीं है। :-)

+1

या किसी भी रिक्त स्थान है और इस तरह ... –

1

मेरा विश्वास यह था कि बैकटीक्स का उपयोग मुख्य रूप से गलत प्रश्नों को रोकने के लिए किया जाता था जो सामान्य एसक्यूएल पहचानकर्ताओं, यानी एलआईटी और COUNT का उपयोग करते थे।

3

बैकटिक्स का उपयोग आपके mysql क्वेरी में आरक्षित कीवर्ड से बचने के लिए किया जाता है, उदा। आप count कॉलम चाहते हैं-असामान्य नहीं।

आप अपने स्तंभ/तालिका/db नाम

में अन्य विशेष वर्ण या रिक्तियों का उपयोग कर सकते वे तुम्हें इंजेक्शन हमलों से सुरक्षित नहीं रखते (यदि आप उन वैसे भी किसी तरह-बुरा व्यवहार में स्तंभ नाम प्रवेश करने की अनुमति)

वे मानकीकृत एसक्यूएल नहीं हैं और केवल mysql में काम करेंगे; अन्य डीबीएमएस " का उपयोग

15

हर बार जब मैं इस चर्चा को देखता हूं, तो मैं उनके शामिल होने के लिए लॉबी करने का प्रयास करता हूं, क्योंकि, जवाब पहले से ही यहां छिपा हुआ है, हालांकि बिना किसी विचार के दूर डूब गया। जब हम गलती से एक फ़ील्ड या टेबल नाम के रूप में किसी कीवर्ड का उपयोग करते हैं, तो हम विभिन्न विधियों से भ्रम से बच सकते हैं, लेकिन केवल उत्सुकता से जागरूक बैक-टिक 'इससे ​​भी अधिक लाभ मिलता है !!!

एक एसक्यूएल कथन में प्रत्येक शब्द पूरे कीवर्ड हैश तालिका के माध्यम से चलाया जाता है यह देखने के लिए कि क्या संघर्ष है, इसलिए, आपने संकलक को बताकर एक महान पक्ष से सवाल किया है, हे, मुझे पता है कि मैं क्या कर रहा हूं, आपको इन शब्दों को जांचने की आवश्यकता नहीं है क्योंकि वे तालिका और फ़ील्ड नामों का प्रतिनिधित्व करते हैं। गति और लालित्य।

चीयर्स, ब्रैड

+4

एसक्यूएल पार्सर को तेज़ करना एक पूरी तरह से विशिष्ट कारण है। स्पीडअप जिसे आप एसक्यूएल पार्सर को हासिल करने की अपेक्षा करते हैं वह पूरी तरह से काल्पनिक है। यदि आपको लगता है कि एक गति है, तो इसे मापें और मापें। अन्यथा, यह एक अनावश्यक और इसलिए समयपूर्व अनुकूलन है। –

1

आप http://dev.mysql.com/doc/refman/5.6/en/identifiers.html

एसक्यूएल जनरेटर में पहचानकर्ता का दस्तावेज़ पढ़ें अक्सर, बैकटिक शामिल होंगे के रूप में यह सब MySQL की सूची सहित से अधिक आसान है सुरक्षित शब्द।एक पहचानकर्ता के रूप में U + 0000 को छोड़कर बीएमपी यूनिकोड वर्ण के किसी भी अनुक्रम का उपयोग करने के लिए, वे केवल

  1. सभी बैकटिक डबल बैकटिक साथ
  2. चारों ओर की जगह ले सकता है कि एकल बैकटिक

साथ

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

अधिकांश समय, यह केवल एक शैली वरीयता है - बेशक, आपके पास date या My Field जैसे फ़ील्ड हैं, और फिर आपको बैकटिक्स का उपयोग करना होगा।

1. हालांकि देखने https://bugs.mysql.com/bug.php?id=68676

संबंधित मुद्दे