Computer >> कंप्यूटर ट्यूटोरियल >  >> प्रोग्रामिंग >> MySQL

MySQL 8.0 में 'rank' आरक्षित शब्द: कॉलम नाम के लिए बैकटिक्स आवश्यक

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_RANK
  • ROW_NUMBER
  • LEAD, LAG
  • FIRST_VALUE, LAST_VALUE
  • NTILE
  • OVER, PARTITION
  • LATERAL
  • GROUPS

आरक्षित शब्द सूची देखें

SELECT * FROM INFORMATION_SCHEMA.KEYWORDS WHERE RESERVED = 1;

सर्वोत्तम अभ्यास

  • सभी पहचानकर्ताओं (टेबल, कॉलम, इंडेक्स, एलियास) के लिए बैकटिक्स उपयोग करें
  • आरक्षित शब्दों को नाम के रूप में टालें
  • माइग्रेशन से पहले mysql_upgrade और संगतता जांच चलाएं

ANSI_QUOTES मोड

SET SQL_MODE = 'ANSI_QUOTES';
CREATE TABLE test ("rank" INT);  -- डबल कोट्स काम करेंगे
-- लेकिन स्ट्रिंग लिटरल के लिए डबल कोट्स काम नहीं करेंगे
  1. Java में MySQL ResultSet से कॉलम नाम कैसे प्राप्त करें? Java में MySQL ResultSet से कॉलम नाम कैसे प्राप्त करें?

    ResultSetMetaData.getMetaData() का उपयोग करें JDBC में ResultSet से कॉलम नाम प्राप्त करने के लिए getMetaData() मेथड को कॉल करें जो ResultSetMetaData ऑब्जेक्ट लौटाता है। प्रोटोटाइप ResultSetMetaData getMetaData() throws SQLException; मुख्य मेथड्स getColumnCount() — कॉलम की संख्या। getColumnLabel(

  1. - क्या MySQL में आरक्षित शब्द 'index' को कॉलम नाम के रूप में उपयोग कर सकते हैं?

    MySQL में बैकटिक के साथ आरक्षित शब्द index को कॉलम नाम के रूप में उपयोग करना INDEX MySQL में एक आरक्षित शब्द है। इसे कॉलम नाम के रूप में उपयोग करने के लिए बैकटिक (`) में लपेटना आवश्यक है। व्यावहारिक उदाहरण बैकटिक के साथ तालिका बनाना CREATE TABLE DemoTable ( `index` INT ); रिकॉर्ड डालना INSE

  1. - MySQL में बैकटिक्स से संख्यात्मक नाम वाला डेटाबेस बनाएं

    MySQL में डेटाबेस नाम संख्या से शुरू हो या केवल संख्या हो तो बैकटिक्स (`) से घेरना आवश्यक है, अन्यथा सिंटैक्स त्रुटि (ERROR 1064) होती है। समस्या CREATE DATABASE 1233; ERROR 1064 (42000): You have an error in your SQL syntax near 1233 at line 1 समाधान: बैकटिक्स उपयोग करें CREATE DATABASE `1233`;