试图解决实验室的一个问题,但似乎想不通.错误代码一直显示"查询失败:第15行出现错误3780(HY000):引用列‘HorseID’和引用的列‘ID’在外键约束‘essonSchedule_ibfk_1’中不兼容."

这里有一些指导,以防你需要更好地了解我正在try 做的事情.

"数据库包含一个Horse表,其中包含多个列:

  • ID-整数,主键
  • RegisteredName-可变长度字符串

该数据库包含一个Student表,其中包含以下各列:

  • ID-整数,主键
  • FirstName-可变长度字符串
  • LastName -可变长度字符串

创建名为LessonSchedule的第三个表,其中包含列:

  • HorseID-0到65,000之间的整数,非空,外键引用Horse(ID)
  • StudentID -0到65000的整数,外键引用Student(ID)
  • LessonDateTime-日期/时间,非空
  • 主键是(HorseID,LessonDateTime)

如果从Horse中删除了一行,则应该自动从LessonSchedule中删除具有相同马ID的行.

如果从Student中删除了一行,则应在LessonSchedule中自动将相同的学生ID设置为NULL."

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

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

-- Your SQL statements go here 
CREATE TABLE LessonSchedule (
HorseID SMALLINT NOT NULL,
StudentID SMALLINT,
LessonDateTime DATETIME NOT NULL,
Primary Key (HorseID, StudentID, LessonDateTime),
Foreign Key (HorseID) REFERENCES Horse(ID),
Foreign Key (StudentID) REFERENCES Student(ID)
);

到目前为止,我已经try 处理外键约束,但没有成功.我真的不知道该怎么做.

推荐答案

CREATE TABLE LessonSchedule (
HorseID SMALLINT UNSIGNED NOT NULL,
StudentID SMALLINT UNSIGNED,
LessonDateTime DATETIME NOT NULL,
Primary Key (HorseID, StudentID, LessonDateTime),
Foreign Key (HorseID) REFERENCES Horse(ID),
Foreign Key (StudentID) REFERENCES Student(ID)
);

原因是约束条件不同,您对两个主表的ID都设置了UNSIGNED,下面关联表中的字段也需要一致.

Mysql相关问答推荐

找出同一表中列A中的每个值在列B中出现的次数

运行简单查询时Prisma预准备语句错误

MYSQL "Like" 正向和反向词序查询

基于关系的每个实体有一个真值和多个假值

获取 TEXT 类型行的百分比

MySQL 8.0.30 正则表达式词匹配特殊字符

使用另一个表中的值更新一个表中的值

在 SQL 中将列添加为 End_date,间隔为 +100 天

MySQL如何通过外键ID Select 多行?

在 MySQL 中 Select COUNT of MAX

SUBSTRING_INDEX 获取第 n 个值

SQL UPDATE中的str_replace?

终止空闲的mysql连接

错误 1396 (HY000): 'user'@'localhost' 的操作 DROP USER 失败

在 PHP 中获取 MySQL 列的总和

mysql中float(2,2)和float()的区别

哪个更好 - 许多小桌子或一张大桌子?

SQLSTATE [42000]:语法错误或访问冲突:1055 SELECT 列表的表达式 #3 不在 GROUP BY 子句中并且包含非聚合

MySQL DAYOFWEEK() - 我的一周从星期一开始

在 Postgresql 中模拟 MySQL 的 ORDER BY FIELD()