MySQL错误涉及反勾号

MySQL错误涉及反勾号,mysql,database-design,backticks,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`),

我对这段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语法是否正确”错误。有什么我遗漏的吗?我是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中,默认情况下,主键列会获取一个索引,因此您可以完全省略该行,这将导致以下代码:

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
    已经是一个
    主键
    ,因此您不必再次将其定义为
    唯一
    ,因为:
    主键
    =
    唯一
    +
    非空
  • 因为MySQL不区分大小写,所以不应该使用大小写名称。因此与其说是
    databaseID
    ,不如说是
    database\u id
    。还有更多的命名约定,你可以通过,虽然我不会在这里提到
因此,对于最终表格定义,我建议:

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;

为什么要在同一列上有3个索引?Primary足够了。您需要将索引databaseID与其他键一样放入()中。谢谢!我对唯一键用法和索引的理解与我真正的意思不同。谢谢你的澄清。