MySQL 8.0.2 से RANK एक आरक्षित शब्द (reserved word) है क्योंकि विंडो फ़ंक्शन RANK() जोड़ा गया। इसे कॉलम नाम के रूप में उपयोग करने के लिए बैकटिक्स (`) आवश्यक हैं।
समस्या
mysql> SELECT VERSION();
+-----------+
| version() |
+-----------+
| 8.0.12 |
+-----------+
mysql> CREATE TABLE DemoTable1596 (
-> Id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
-> StudentName VARCHAR(20),
-> rank INT
-> );
ERROR 1064 (42000): You have an error in your SQL syntax near 'rank int' at line 5
समाधान: बैकटिक्स उपयोग करें
mysql> CREATE TABLE DemoTable1596 (
-> Id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
-> StudentName VARCHAR(20),
-> `rank` INT
-> );
Query OK
डेटा डालें और देखें
mysql> INSERT INTO DemoTable1596(StudentName, `rank`) VALUES('Bob', 4567);
mysql> INSERT INTO DemoTable1596(StudentName, `rank`) VALUES('David', 1);
mysql> SELECT * FROM DemoTable1596;
+----+-------------+------+ | Id | StudentName | rank | +----+-------------+------+ | 1 | Bob | 4567 | | 2 | David | 1 | +----+-------------+------+
MySQL 8.0 में नए आरक्षित शब्द (आंशिक)
RANK- विंडो फ़ंक्शनDENSE_RANKROW_NUMBERLEAD,LAGFIRST_VALUE,LAST_VALUENTILEOVER,PARTITIONLATERALGROUPS
आरक्षित शब्द सूची देखें
SELECT * FROM INFORMATION_SCHEMA.KEYWORDS WHERE RESERVED = 1;
सर्वोत्तम अभ्यास
- सभी पहचानकर्ताओं (टेबल, कॉलम, इंडेक्स, एलियास) के लिए बैकटिक्स उपयोग करें
- आरक्षित शब्दों को नाम के रूप में टालें
- माइग्रेशन से पहले
mysql_upgradeऔर संगतता जांच चलाएं
ANSI_QUOTES मोड
SET SQL_MODE = 'ANSI_QUOTES';
CREATE TABLE test ("rank" INT); -- डबल कोट्स काम करेंगे
-- लेकिन स्ट्रिंग लिटरल के लिए डबल कोट्स काम नहीं करेंगे