1

我有 3 个表students,,,,courses关系enroll为“学生注册课程”

我已经创建studentssid作为主键的表

我已经创建coursescid作为主键的表

现在我必须enroll按如下方式创建表,但它在关键字上显示错误,错误references是什么?

create table enroll(
    grade char(2),
    sid int not null,
    cid int not null,
    primary key(sid,cid),
    foreign key cid references courses on delete cascade,
    foreign key sid references students on delete cascade
);
4

3 回答 3

3

您必须指定要在外部表中引用的字段,并且两组关键字段()也必须用括号括起来。

foreign key (cid) references courses (name_of_foreign_field_here) on delete cascade,
            ^   ^                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
于 2012-04-13T18:01:05.577 回答
0

简单的建议

对于多对多关系表,您必须创建另一个关系表,并获取两个表的 PK id 并保存在此关系表中

而对于一对多关系表,将一个表的 PK 属性放在多个表的属性中,并始终像这样链接它们

于 2012-04-13T18:00:24.377 回答
0

我认为您需要将 cid 和 sid 放在大括号中。这是一个示例代码,试一试并告知您的结果。请确保引用的大小和数据类型,即课程和学生的主键与注册的主键相同。

CREATE TABLE `enroll` (
    `sid` INT(10) NOT NULL,
    `cid` INT(10) NOT NULL,
    PRIMARY KEY (`sid`, `cid`),
    INDEX `FK_enroll_course` (`cid`),
    CONSTRAINT `FK_enroll_course` FOREIGN KEY (`cid`) REFERENCES `course` (`id`) ON DELETE CASCADE,
    CONSTRAINT `FK_enroll_student` FOREIGN KEY (`sid`) REFERENCES `student` (`id`) ON DELETE CASCADE
)
于 2012-04-13T18:04:44.420 回答