Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/codeigniter/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 为什么可以';我不能在此添加外键约束吗?_Mysql_Foreign Keys - Fatal编程技术网

Mysql 为什么可以';我不能在此添加外键约束吗?

Mysql 为什么可以';我不能在此添加外键约束吗?,mysql,foreign-keys,Mysql,Foreign Keys,我无法在成绩单中添加外键cid。主修课程的外键很好用,但成绩单上的外键不起作用 这是错误 错误代码:1215。无法添加外键约束课程。cid不是键,因此转录本无法创建外键。请尝试以下操作: CREATE TABLE usertypes ( userType INTEGER, userName VARCHAR(12), PRIMARY KEY(userType) ); CREATE TABLE Users (

我无法在成绩单中添加外键cid。主修课程的外键很好用,但成绩单上的外键不起作用

这是错误
错误代码: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)
    );