MySQL 涉及反引号的错误

MySQL error involving backticks

我在使用这段 mySQL 代码时遇到一些问题,不想修复

CREATE TABLE `DatabaseMGR`
  (
    `databaseID` INT UNSIGNED NOT NULL AUTO_INCREMENT,
    `primCat` INT UNSIGNED NOT NULL, 
    `databaseName` VARCHAR(20),
     UNIQUE KEY (`databaseID`),
     PRIMARY KEY (`databaseID`),
     INDEX `databaseID`
)ENGINE = InnoDB;

它说第 1 行有一个错误,在响应 ` 用法时出现常规 "check your mysql syntax for right usage" 错误。有什么我想念的吗?我是 sql 的新手,所以我可能遗漏了一些明显的东西。

谢谢。

您的问题的要点在于定义索引的那一行。在 create table 语句中,您应该按照以下语法使用它:

 create table table_name (
    ...
    index `INDEX_NAME` (`INDEX_COLUMN`)
 );

因此,您可以通过将代码更改为以下来解决您的问题:

CREATE TABLE `DatabaseMGR`
  (
    `databaseID` INT UNSIGNED NOT NULL AUTO_INCREMENT,
    `primCat` INT UNSIGNED NOT NULL, 
    `databaseName` VARCHAR(20),
     UNIQUE KEY (`databaseID`),
     PRIMARY KEY (`databaseID`),
     INDEX `ix_databaseID` (`databaseID`) # Note the change on this line
)ENGINE = InnoDB;

但是,在 MySQL 中,primary key 列默认获得一个索引,因此您可以完全省略该行,这将导致以下代码:

CREATE TABLE `DatabaseMGR`
  (
    `databaseID` INT UNSIGNED NOT NULL AUTO_INCREMENT,
    `primCat` INT UNSIGNED NOT NULL, 
    `databaseName` VARCHAR(20),
     UNIQUE KEY (`databaseID`),
     PRIMARY KEY (`databaseID`)
)ENGINE = InnoDB;

进一步改进:

  • databaseID 已经是 primary key,因此您不必再次定义它 unique,因为:primary key = unique + not null
  • 由于 MySQL 不区分大小写,因此您不应使用驼峰命名。因此,与其说 databaseID,不如说 database_id。还有更多的命名约定你可以通过,虽然我不会在这里提到。

所以对于最终的 table 定义,我建议:

CREATE TABLE `database_mgr`
  (
    `database_id` INT UNSIGNED NOT NULL AUTO_INCREMENT,
    `prim_cat` INT UNSIGNED NOT NULL, 
    `database_name` VARCHAR(20),
     PRIMARY KEY (`databaseID`)
)ENGINE = InnoDB;