Ошибка 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, поэтому я мог упустить что-то очевидное.

Благодарю.

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, Есть еще соглашение об именах, которое вы можете пройти, хотя я не буду здесь упоминать.

Итак, для определения финального стола я предлагаю:

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;
Другие вопросы по тегам