请帮助我在MySQL代码中找到我的错误

时间:2012-12-07 21:59:21

标签: mysql mysql-workbench

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

    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
    );

3 个答案:

答案 0 :(得分:1)

course_number不是表格课程中的主键。

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

答案 1 :(得分:1)

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

alter table course add index (course_number);

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

  

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

答案 2 :(得分: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)