mysql - 我找不到所描述的语法错误有人可以指出错误并提供解释我做错了什么吗?

标签 mysql sql syntax syntax-error

这是一道逾期的家庭作业题,但为了准备测验,我已经在这上面坚持了 4 天了。我找不到所描述的错误并准备好拔掉我的头发。有人可以解释我做错了什么吗?

给出的错误:

ERROR 1064 (42000) at line 15: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '(Cat)ID ON DELETE CASCADE ,FOREIGN KEY(OwnerID) REFERENCES (Owner)' at line 6

我认为我指的是 CatID FOREIGN KEY是错误的,但我的 Material 和互联网搜索中没有任何内容解释了这一点。错误代码表明命名表时应该使用引号,而这在我接下来的类(class)示例中从未存在过。本类(class)的独特之处在于 CatID 既是主键又是外键。

提前对帖子的长度表示歉意。只是想彻底(按要求)并在提出问题之前解决潜在的问题。

SQL 代码

注意:第 1-14 行是给我的,因此未受影响。

CREATE TABLE Cat (
    ID              SMALLINT UNSIGNED AUTO_INCREMENT,
    RegisteredName  VARCHAR(15),
    PRIMARY KEY (ID)
);

CREATE TABLE Owner (
    ID             SMALLINT UNSIGNED AUTO_INCREMENT,
    FirstName      VARCHAR(20),
    LastName       VARCHAR(30),
    PRIMARY KEY (ID)
);

-- Your SQL statements go here 
CREATE TABLE LessonSchedule(
   CatID SMALLINT UNSIGNED NOT NULL
  ,OwnerID SMALLINT UNSIGNED 
  ,LessonDateTime DATETIME NOT NULL
  ,PRIMARY KEY (CatID, LessonDateTime)
  ,FOREIGN KEY(CatID) REFERENCES (Cat)ID
      ON DELETE CASCADE
  ,FOREIGN KEY(OwnerID) REFERENCES (Owner)ID
      ON DELETE SET NULL
);

分配说明:

这就是我应该做的。也许我对说明的理解错误?

Create the Lessons table with columns:

  • CatID - integer with range 0 to 65 thousand, not NULL, partial primary key, foreign key references Cat(ID).
  • StudentID - integer with range 0 to 65 thousand, foreign key references Student(ID)
  • LessonDateTime - date/time, not NULL, partial primary key.

If a row is deleted from Cat, the rows with the same cat ID should be deleted from Lessons automatically.

If a row is deleted from Owner, the same owner IDs should be set to NULL in Lessons automatically.

Note: Table and column names are case sensitive in the auto-grader.

我尝试了什么以及发生了什么

  • 检查逗号位置是否和 );安置一切都很好。在我看来是这样吗?前导逗号不应该产生任何影响,并且由于各种原因,这是一个很好的做法。所以,我尝试了两种方式(前导逗号和尾随逗号)。都没有更改给定的错误代码。

  • 检查了 70 次拼写错误。发现3个实例,已修复。错误代码不变。

  • 注释行和部分以隔离问题。除了引用了哪些行之外,错误代码并没有真正改变......这让我更加困惑。

  • 我怀疑问题在于 PRIMARY KEY 如何和FOREIGN KEY对于CatID和Cat.ID分别怎么写?

  • 该 Material 指出,如果主键也是复合的,则外键也应该是复合的。但是,在这种情况下,这与我的想法不一致?

  • 即CatID 位于 PRIMARY KEY (CatID, LessonDateTime)只需使用 FOREIGN KEY(CatID) REFERENCES (Cat)ID 进行引用不是FOREIGN KEY(CatID,LessonDateTime) REFERENCES (Cat)ID ?只有 CatID 需要引用。

  • 我尝试将第 19 行放在第 23 行之后,但这根本没有改变错误。

  • 我尝试在 LessonSchedule 中移动列顺序,以防主键列必须彼此相邻:

    1. 猫ID

    2. 类(class)日期时间

    3. 所有者ID

除了写错之外,唯一符合逻辑的事情就是使用了不是 MySQL 的关键字?

最佳答案

Create the Lessons table with columns: CatID - integer with range 0 to 65 thousand, not NULL, partial primary key, foreign key references Cat(ID).

你有两个错别字 -

,FOREIGN KEY(CatID) REFERENCES (Cat)ID ON DELETE CASCADE

应该是

  ,FOREIGN KEY(CatID) REFERENCES Cat(ID)
      ON DELETE CASCADE

还有

,FOREIGN KEY(OwnerID) REFERENCES (Owner)ID ON DELETE SET NULL

应该是

  ,FOREIGN KEY(OwnerID) REFERENCES Owner(ID)
      ON DELETE SET NULL

最终结果应该是:

CREATE TABLE LessonSchedule(
   CatID SMALLINT UNSIGNED NOT NULL
  ,OwnerID SMALLINT UNSIGNED 
  ,LessonDateTime DATETIME NOT NULL
  ,PRIMARY KEY (CatID, LessonDateTime)
  ,FOREIGN KEY(CatID) REFERENCES Cat(ID)
      ON DELETE CASCADE
  ,FOREIGN KEY(OwnerID) REFERENCES Owner(ID)
      ON DELETE SET NULL
);

关于mysql - 我找不到所描述的语法错误有人可以指出错误并提供解释我做错了什么吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/74766036/

相关文章:

mysql - 使用两列选择唯一计数

mysql - 右表有多个选项的 LEFT JOIN 显然很糟糕

python - 正确的方法提示 '->' python函数中的多个返回类型

php - 如何测试 SimpleXML 是否安装在我的 PHP 上?

mysql - JSON Rails 一对多的嵌套属性

Mysql innodb 查询返回缓慢结果

jquery - iOS $(document).on() 在模态中工作, $ ('' ).click(function() 仅在网站内工作

c# - 将锯齿状数组传递给 C# 中的方法

asp.net - 即使执行成功,ExecuteNonQuery 返回 -1

mysql - sql查询每月金额