2015-10-18 59 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