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

MySQL में एक टेबल या कॉलम नाम के रूप में आरक्षित शब्द का उपयोग करने के कारण सिंटैक्स त्रुटि

समस्या

MySQL में कुछ शब्द जैसे SELECT , INSERT , DELETE आदि आरक्षित शब्द हैं। चूंकि उनका एक विशेष अर्थ है, MySQL इसे एक सिंटैक्स त्रुटि के रूप में मानता है जब भी आप उन्हें तालिका नाम, कॉलम नाम या अन्य प्रकार के पहचानकर्ता के रूप में उपयोग करते हैं - जब तक कि आप पहचानकर्ता को बैकटिक्स से घेर नहीं लेते।

जैसा कि आधिकारिक दस्तावेज़ों में बताया गया है, 10.2 स्कीमा ऑब्जेक्ट नाम (जोर दिया गया):

<ब्लॉकक्वॉट>

डेटाबेस, तालिका, अनुक्रमणिका, स्तंभ, उपनाम, दृश्य, संग्रहीत कार्यविधि, विभाजन, तालिका स्थान और अन्य ऑब्जेक्ट नामों सहित MySQL के भीतर कुछ वस्तुओं को पहचानकर्ता के रूप में जाना जाता है

...

यदि किसी पहचानकर्ता में विशेष वर्ण हैं या वह आरक्षित शब्द . है , आपको जरूरी जब भी आप इसका संदर्भ लें तो इसे उद्धृत करें।

...

पहचानकर्ता उद्धरण वर्ण बैकटिक . है ("` "):

कीवर्ड और आरक्षित शब्दों की पूरी सूची 10.3 कीवर्ड और सुरक्षित शब्द . उस पृष्ठ में, "(R)" के बाद आने वाले शब्द आरक्षित शब्द हैं। कुछ आरक्षित शब्द नीचे सूचीबद्ध हैं, जिनमें कई ऐसे शब्द भी शामिल हैं जो इस समस्या का कारण बनते हैं।

  • जोड़ें
  • और
  • पहले
  • द्वारा
  • कॉल करें
  • मामला
  • शर्त
  • हटाएं
  • डीईएससी
  • वर्णन करें
  • से
  • ग्रुप
  • IN
  • इंडेक्स
  • सम्मिलित करें
  • अंतराल
  • आईएस
  • कुंजी
  • पसंद करें
  • सीमा
  • लंबी
  • मिलान
  • नहीं
  • विकल्प
  • या
  • आदेश
  • विभाजन
  • रैंक
  • संदर्भ
  • चुनें
  • टेबल
  • तक
  • अपडेट करें
  • कहां

समाधान

आपके पास दो विकल्प हैं।

<एच3>1. आरक्षित शब्दों को पहचानकर्ता के रूप में प्रयोग न करें

सबसे आसान उपाय यह है कि आरक्षित शब्दों को पहचानकर्ता के रूप में उपयोग करने से बचें। आप शायद अपने कॉलम के लिए एक और उचित नाम ढूंढ सकते हैं जो आरक्षित शब्द नहीं है।

ऐसा करने के कुछ फायदे हैं:

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

  • पहचानकर्ताओं को उद्धृत करने के साधन SQL बोलियों के बीच भिन्न होते हैं। जबकि MySQL डिफ़ॉल्ट रूप से पहचानकर्ताओं को उद्धृत करने के लिए बैकटिक्स का उपयोग करता है, ANSI- अनुरूप SQL (और वास्तव में ANSI SQL मोड में MySQL, जैसा कि नोट किया गया है यहां ) पहचानकर्ताओं को उद्धृत करने के लिए दोहरे उद्धरण चिह्नों का उपयोग करता है। जैसे, बैकटिक्स के साथ पहचानकर्ताओं को उद्धृत करने वाली क्वेरी अन्य SQL बोलियों के लिए कम आसानी से पोर्टेबल होती हैं।

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

<एच3>2. बैकटिक्स का प्रयोग करें

यदि तालिका या स्तंभ का नाम बदलना संभव नहीं है, तो आपत्तिजनक पहचानकर्ता को बैकटिक्स में लपेटें (` ) जैसा कि 10.2 स्कीमा ऑब्जेक्ट नाम से पहले के उद्धरण में वर्णित है

उपयोग प्रदर्शित करने के लिए एक उदाहरण (10.3 कीवर्ड और आरक्षित शब्द से लिया गया ):

mysql> CREATE TABLE interval (begin INT, end INT);
ERROR 1064 (42000): You have an error in your SQL syntax.
near 'interval (begin INT, end INT)'

mysql> CREATE TABLE `interval` (begin INT, end INT); Query OK, 0 rows affected (0.01 sec)

इसी तरह, कीवर्ड key . को लपेटकर प्रश्न की क्वेरी को ठीक किया जा सकता है बैकटिक्स में, जैसा कि नीचे दिखाया गया है:

INSERT INTO user_details (username, location, `key`)
VALUES ('Tim', 'Florida', 42)";               ^   ^



  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. PHP में एक्सेल में MySQL डेटा निर्यात करें

  3. MySQL ट्यूटोरियल:MySQL इन क्लॉज (बेसिक)

  4. MySQL में JSON डेटा कैसे स्टोर करें

  5. SQL कमांड का परिचय