CREATE DATABASE my_db;

CREATE TABLE class (
  classID int NOT NULL AUTO_INCREMENT,
  nameClass varchar(255),
  classLeader varchar(255),
  FOREIGN KEY (classLeader) REFERENCES student(studentID),
  PRIMARY KEY (classID));

CREATE TABLE student (
  studentID int NOT NULL AUTO_INCREMENT,
  lastName varchar(255),
  firstName varchar(255),
  classID int,
  FOREIGN KEY (classID) REFERENCES class(classID),
  PRIMARY KEY (studentID));

我试图通过使用外键来确保表之间的数据一致性,以便DBMS可以判断错误;但是,由于某些原因,我们似乎无法做到这一点.错误是什么,还有其他 Select 吗?另外,当我填充具有外键的表时,我不能填充为外键保留的字段,对吗?另外,外键被认为是一个键吗?

推荐答案

最有可能的问题是这一行:

FOREIGN KEY (classLeader) REFERENCES student(studentID),

classLeader的数据类型为VARCHAR(255).它必须达到被引用列的match the datatype个.student.studentID美元.当然,student表必须存在,studentID列必须存在,studentID列应该是学生表的主键(尽管我相信MySQL允许将其作为唯一键,而不是主键,甚至只有一个索引).

无论如何,这里缺少的是SHOW CREATE TABLE student;的输出


数据类型不匹配.

classLeader VARCHAR(255)列不能是对studentID INT的外键引用.

这两列的数据类型必须匹配.

Database相关问答推荐

更新数据后,TableView停止按搜索栏进行筛选

Prisma - 将属性的类型设置为枚举数组

我如何计算mongo中的多个字段?

如何高效地存储 100 万个单词并通过starts_with、contains 或ends_with 进行查询?

使用 noSQL 和 MongoDB 在数据库中存储任何类型文件的最佳方法是什么

在哪里存储 PHP 应用程序的数据库登录凭据

多列上的全文索引如何工作?

PostgreSQL Clob 数据类型

repeating groups是什么意思?

用于 sql server 的免费国家、城市数据库

怎样有效存储 7.300.000.000 行?

nvarchar (50) 与 nvarchar (max) 的含义

JavaScript 布尔搜索查询生成器接口库?

SQLite3 不支持外键约束吗?

判断Android中的应用程序数据库中是否存在列

SQL 中的 CAST 和 CONVERT 是否相同?

Hibernate如何连接多个数据库

postgreSQL 同时将列类型从 int 更改为 bigint

LevelDB 支持 java 吗?

获取 SQL Server 2008 中新插入行的主键