Mysql 为什么可以';我不能在此添加外键约束吗?
我无法在成绩单中添加外键cid。主修课程的外键很好用,但成绩单上的外键不起作用 这是错误Mysql 为什么可以';我不能在此添加外键约束吗?,mysql,foreign-keys,Mysql,Foreign Keys,我无法在成绩单中添加外键cid。主修课程的外键很好用,但成绩单上的外键不起作用 这是错误 错误代码:1215。无法添加外键约束课程。cid不是键,因此转录本无法创建外键。请尝试以下操作: CREATE TABLE usertypes ( userType INTEGER, userName VARCHAR(12), PRIMARY KEY(userType) ); CREATE TABLE Users (
错误代码:1215。无法添加外键约束
课程。cid
不是键,因此转录本
无法创建外键。请尝试以下操作:
CREATE TABLE usertypes (
userType INTEGER,
userName VARCHAR(12),
PRIMARY KEY(userType)
);
CREATE TABLE Users (
loginid CHAR(9),
name VARCHAR(15),
netid VARCHAR(15) NOT NULL,
password VARCHAR(15) NOT NULL,
userType INTEGER,
PRIMARY KEY (loginid),
UNIQUE (netid),
FOREIGN KEY (userType) REFERENCES usertypes(userType)
ON DELETE NO ACTION
);
CREATE TABLE Courses (
majorid CHAR(3),
cid CHAR (3),
secNum CHAR(2),
year CHAR(4),
semesterid CHAR(2),
profID CHAR(9),
PRIMARY KEY (majorid,cid,secNum,year,semesterid),
FOREIGN KEY (majorid) REFERENCES Majors (majorid),
FOREIGN KEY (profID) REFERENCES Users(loginid)
);
create table transcript(
cid char(3),
grade char(2),
primary key(cid, grade),
foreign key(cid) references courses(cid)
);
简短的版本是,我不认为您可以将外键指向未标识为主键或具有唯一约束的对象,请参阅 我不确定你是如何使用课程表中的cid的,如果它可能是110,并且有数学110和物理110。这个问题是,如果某人的成绩单上有110,那么它是指数学还是物理
如果cid是一个主键,每个类都有一个唯一的值,那么它本身就应该是一个主键。如果您的数学和物理成绩为110,那么最好添加一个每行唯一的主键,例如标识键、自动递增键。此处您没有描述
专业
或用户
表。。请用这些表格的定义更新您的问题。快速提示,停止使用CHAR
作为引用类型。您建议使用什么varchar
?绝对不是。整数。对字符串数据执行连接或大量操作的成本较高。好的,我会记住这一点,但对于未来的项目。谢谢
CREATE TABLE Courses (
majorid CHAR(3),
cid CHAR (3),
secNum CHAR(2),
year CHAR(4),
semesterid CHAR(2),
profID CHAR(9),
PRIMARY KEY (majorid,cid,secNum,year,semesterid),
KEY (cid)
);