我对这段不想修复的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语法是否正确使用”错误以响应`usage。有什么我想念的吗?我是sql的新手,所以我可能会遗漏一些明显的东西。
感谢。
答案 0 :(得分: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
+ {{1 }} not null
,更好地说databaseID
。您可以通过更多命名约定,但我不会在此提及。因此,对于决赛桌的定义,我建议:
database_id