Главное для вашей проблемы - на линии, которую вы определяете индексом. В 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;
Почему вы хотите 3 индексов на одном столбце Primary достаточно – Mihai
Вам нужно положить INDEX DatabaseID в(), как и другие клавиши – user993553