MySQL 涉及反引号的错误
MySQL error involving backticks
我在使用这段 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 行有一个错误,在响应 ` 用法时出现常规 "check your mysql syntax for right usage" 错误。有什么我想念的吗?我是 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
= unique
+ not null
- 由于 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 代码时遇到一些问题,不想修复
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 行有一个错误,在响应 ` 用法时出现常规 "check your mysql syntax for right usage" 错误。有什么我想念的吗?我是 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
=unique
+not null
- 由于 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;