2015-10-18 40 views
1

我有一些问题,这一块的MySQL的代码是不希望得到固定的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,所以我可能会错过显而易见的东西。

谢谢。

+0

为什么你要在同一列3个指标主要是足够 – Mihai

+0

你需要把INDEX databaseID以()为其他键 – user993553

回答

1

您问题的要点在您定义索引的那一行。在create table声明,您应该使用此语法使用它:

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 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`) 
)ENGINE = InnoDB; 

为了提高更多:

  • databaseID已经是primary key,所以你不必做定义它再次unique,因为:primary key = unique + not null
  • 由于MySQL是不区分大小写,您应该不使用骆驼案件名称。所以,而不是databaseID,更好地说​​。你可以经历更多的命名约定,尽管我不会在这里提及。

因此对于决赛桌认定中,我建议:

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; 
+1

谢谢!我对独特的密钥使用和索引有不同的理解,而不是我的真正意思。感谢您的澄清。 – FDaniels