समस्या
MySQL में INDEX एक आरक्षित शब्द (reserved word) है, इसलिए इसे सीधे कॉलम नाम के रूप में उपयोग करने पर सिंटैक्स त्रुटि होती है।
त्रुटि उदाहरण
mysql> CREATE TABLE DemoTable (
-> Id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
-> index INT
-> ) ENGINE=MyISAM;
ERROR 1064 (42000): You have an error in your SQL syntax;
check the manual that corresponds to your MySQL server version
for the right syntax to use near 'int )ENGINE=MyISAM' at line 4
समाधान: बैकटिक्स (`) का उपयोग करें
आरक्षित शब्द को कॉलम नाम के रूप में उपयोग करने के लिए बैकटिक्स में घेरें:
mysql> CREATE TABLE DemoTable (
-> Id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
-> `index` INT
-> ) ENGINE=MyISAM;
Query OK, 0 rows affected (0.28 sec)
डेटा डालना और देखना
mysql> INSERT INTO DemoTable(`index`) VALUES(4);
Query OK, 1 row affected (0.10 sec)
mysql> INSERT INTO DemoTable(`index`) VALUES(8);
Query OK, 1 row affected (0.07 sec)
mysql> INSERT INTO DemoTable(`index`) VALUES(12);
Query OK, 1 row affected (0.06 sec)
mysql> SELECT * FROM DemoTable;
आउटपुट:
+----+-------+
| Id | index |
+----+-------+
| 1 | 4 |
| 2 | 8 |
| 3 | 12 |
+----+-------+
3 rows in set (0.00 sec)
नियम: पहचानकर्ताओं के लिए बैकटिक्स
- टेबल नाम, कॉलम नाम, इंडेक्स नाम, एलियास के लिए बैकटिक्स उपयोग करें
- आरक्षित शब्दों (INDEX, ORDER, GROUP, SELECT, आदि) के लिए अनिवार्य
- विशेष वर्ण या स्पेस वाले नामों के लिए अनिवार्य
- सर्वोत्तम अभ्यास: हमेशा पहचानकर्ताओं के लिए बैकटिक्स उपयोग करें
सामान्य आरक्षित शब्द (आंशिक सूची)
INDEX, KEY, PRIMARY, UNIQUE, FOREIGN, REFERENCES,
ORDER, GROUP, BY, SELECT, INSERT, UPDATE, DELETE,
WHERE, FROM, JOIN, LEFT, RIGHT, INNER, OUTER,
TABLE, DATABASE, CREATE, ALTER, DROP, TRUNCATE,
INT, VARCHAR, TEXT, DATE, TIME, DATETIME, ...
सुझाव
आरक्षित शब्दों को कॉलम नाम के रूप में उपयोग करने से बचें। बजाय index के, idx, sort_order, position जैसे वर्णनात्मक नाम उपयोग करें।