2015-10-18 2 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 индексов на одном столбце Primary достаточно – Mihai

+0

Вам нужно положить INDEX DatabaseID в(), как и другие клавиши – user993553

ответ

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 + not null
  • Поскольку MySQL не чувствительна к регистру, вы должны не использовать имена верблюдов. Итак, вместо databaseID, лучше сказать database_id. Существует больше соглашений об именах, которые вы можете пройти, хотя я не буду здесь упоминать.

Так что для финального стола Defination я предлагаю:

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

Смежные вопросы