首页 文章

在MYSQL中声明FOREIGN KEYS时出现语法错误(使用innoDB)

提问于
浏览
3

我有以下表格:

CREATE TABLE IF NOT EXISTS书籍(book_id varchar(50)NOT NULL,book_title varchar(50)NOT NULL,courseid varchar(50)NOT NULL,FOREIGN KEY('courseid')REFERENCES'course'('course_id')ON DELETE CASCADE)ENGINE = InnoDB DEFAULT CHARSET = latin1; CREATE TABLE IF NOT EXISTS course(course_id varchar(50)NOT NULL,year varchar(50)NOT NULL,section varchar(50)NOT NULL,PRIMARY KEY(course_id))ENGINE = InnoDB DEFAULT CHARSET = latin1;

我想在courseid(在books表下)引用一个引用course_id(在课程表下)的外键,但是收到以下错误消息:

**#1064 - 您的SQL语法出错;查看与您的MySQL服务器版本对应的手册,以便在''courseid'附近使用正确的语法 . )REFERENCES'course'('course_id')

)发动机=第15行的InnoDB DEFAULT CHARS'**

我厌倦了几种声明外键的语法(使用CONSTRAINT FOREIGN KEY,有/没有引号等)但没有用 .

我正在使用Xamp WITH Server版本:5.5.32 - MySQL社区服务器(GPL) .

有人可以帮我解决这个问题吗?

谢谢

2 回答

  • 0

    使用back-ticks`而不是单引号也先创建课程表然后创建books表,以便books表能够指向课程表

    CREATE TABLE IF NOT EXISTS course (
      course_id VARCHAR (50) NOT NULL,
      YEAR VARCHAR (50) NOT NULL,
      section VARCHAR (50) NOT NULL,
      PRIMARY KEY (course_id)
    ) ENGINE = INNODB DEFAULT CHARSET = latin1 ;
    
    CREATE TABLE IF NOT EXISTS books (
      book_id VARCHAR (50) NOT NULL,
      book_title VARCHAR (50) NOT NULL,
      courseid VARCHAR (50) NOT NULL,
      FOREIGN KEY (`courseid`) REFERENCES `course` (`course_id`) ON DELETE CASCADE
    ) ENGINE = INNODB DEFAULT CHARSET = latin1 ;
    

    See fiddle demo

  • 2

    简单地说:

    your code:

    FOREIGN KEY ('courseid') REFERENCES 'course'('course_id') ON DELETE CASCADE
    

    change:

    FOREIGN KEY (`courseid`) REFERENCES `course` (`course_id`) ON DELETE CASCADE
    

    你必须创建 primary key table of course(course_id) 然后才应该创建引用 foreign key table of books(courseid) .

相关问题