涉及反引号的 MySQL 错误

标签 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`),
     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/

相关文章:

kotlin - Kotlin 是否允许对测试类使用反引号名称?

bash - 在 msys bash 上包含换行符时 PS1 命令替换失败

通过 Powershell SSH (POSH) 进行 MYSQLDUMP

php - 我在这里使用什么 Laravel Eloquent 关系

php - 通过 php 确认对 sql 数据库的更改和添加?

mongodb - 了解 MongoDB(和一般的 NoSQL)以及如何充分利用它

php - 如何在表中存储用户选择的多个选项

python - Python 中 Bash 反引号的等价物

php - 使用php中的编辑和删除图像删除和更新行

mysql - 根据实际时间或包括延迟的实际时间在数据库中查找时间