MySQL错误涉及反勾号
我对这段mySQL代码有一些问题,不希望得到修复MySQL错误涉及反勾号,mysql,database-design,backticks,Mysql,Database Design,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`),
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中,默认情况下,主键列会获取一个索引,因此您可以完全省略该行,这将导致以下代码:
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
,因此您不必再次将其定义为主键
,因为:唯一
=主键
+唯一
非空
- 因为MySQL不区分大小写,所以不应该使用大小写名称。因此与其说是
,不如说是databaseID
。还有更多的命名约定,你可以通过,虽然我不会在这里提到database\u 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;
为什么要在同一列上有3个索引?Primary足够了。您需要将索引databaseID与其他键一样放入()中。谢谢!我对唯一键用法和索引的理解与我真正的意思不同。谢谢你的澄清。