1

我不确定我在这里做错了什么,但我收到一个错误:

    Error Code: 1005. Can't create table 'erm.section' (emo:150)

这是代码。“课程”表已成功创建。我尝试在“section”表中修改 course_number attritube 的名称,但这没有用。

    USE erm;

    CREATE TABLE course
    (
        course_name         VARCHAR(30)     NOT NULL,
        course_number       VARCHAR(20)     NOT NULL,
        credit_hours        INT             NOT NULL,
        department          VARCHAR(10),
        CONSTRAINT course_pk PRIMARY KEY (course_name)
    );

    CREATE TABLE section
    (
        section_identifier      INT                 NOT NULL,
        course_number           VARCHAR(20),
        semester                VARCHAR(10)         NOT NULL,
        school_year             VARCHAR(4)          NOT NULL,
        instructor              VARCHAR(25),
        CONSTRAINT section_pk PRIMARY KEY (section_identifier),
        CONSTRAINT section_fk FOREIGN KEY (course_number)
            REFERENCES course (course_number)
            ON DELETE       SET NULL 
            ON UPDATE       CASCADE
    );
4

3 回答 3

1

course_number 不是 course 表中的主键。

表部分中的外键必须引用另一个表的主键。

于 2012-12-07T22:00:51.423 回答
1

您必须在外键引用的列上创建索引:

alter table course add index (course_number);

(它不必是主键索引。)来自MySQL 文档

InnoDB 允许外键引用任何索引列或列组。但是,在引用的表中,必须有一个索引,其中引用的列按相同顺序列为第一列。

于 2012-12-07T22:09:40.523 回答
0
 A FOREIGN KEY in one table points to a PRIMARY KEY in another table.

AFAIK,删除CONSTRAINT,然后重命名,然后添加CONSTRAINT后面是唯一的方法。先备份!

放弃它使用这个

    ALTER TABLE section
   DROP FOREIGN KEY course_number

并再次添加它使用这个

   ALTER TABLE section
 ADD FOREIGN KEY (course_number)
 REFERENCES course (course_number)
于 2012-12-07T22:19:40.873 回答