我在这段 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 新手,所以我可能遗漏了一些明显的东西。
谢谢。
最佳答案
问题的要点在于定义索引的那一行。在 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
=唯一
+不为空
- 由于 MySQL 不区分大小写,因此您不应使用驼峰命名。因此,与其说
databaseID
,不如说database_id
。您可以使用更多的命名约定,但我不会在这里提及。
因此对于决赛 table 的定义,我建议:
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;
关于涉及反引号的 MySQL 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33195867/