涉及反引号的MySQL错误

时间:2015-10-18 08:32:28

标签: mysql database-design 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行有一个错误,常规的“检查你的mysql语法是否正确使用”错误以响应`usage。有什么我想念的吗?我是sql的新手,所以我可能会遗漏一些明显的东西。

感谢。

1 个答案:

答案 0 :(得分:1)

问题的关键在于您定义索引的行。在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 + {{1 }}
  • 由于MySQL不区分大小写,因此不应使用驼峰式名称。因此,而不是not null,更好地说databaseID。您可以通过更多命名约定,但我不会在此提及。

因此,对于决赛桌的定义,我建议:

database_id