当前位置: 首页 > 知识库问答 >
问题:

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

洪子晋
2023-03-14

我有以下表格:

如果不存在,则创建表book

book_idvarchar(50)不为空,

book_titlevarchar(50)不为空,

courseidvarchar(50)不为空,

外键('courseid')在删除级联上引用'course'('course_id')

)ENGINE=InnoDB默认CHARSET=latin1;

如果不存在,请创建表

course_idvarchar(50)Not NULL,

年份varchar(50)Not NULL,

sectionvarchar(50)不为空,

主键(course_id

)ENGINE=InnoDB默认CHARSET=latin1;

我想使courseid(在books表下)成为引用course_id(在course表下)的外键,但得到以下错误消息:

**#1064年的今天,您的SQL语法出现错误;查看与MySQL服务器版本对应的手册,以了解在“courseid”附近使用“course”(“course_id”)的正确语法

)引擎=第15行的InnoDB默认字符**

我厌倦了几种声明外键的语法(使用约束外键、带/不带引号等),但都不起作用。

我使用的是Xamp with Server版本:5.5.32-MySQL Community Server(GPL)。

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

谢谢

共有2个答案

席波娃
2023-03-14

简单地说:

您的代码:

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

改变:

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

你必须先创建主键表当然(课程id),然后才应该创建参考外键表图书(课程id)。

梁丘逸仙
2023-03-14

使用反勾号代替单引号,也可以先创建课程表,然后创建图书表,这样图书表就可以指向课程表

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 ;

看小提琴演示

 类似资料:
  • 我是mysql新手,我正在尝试创建一个存储过程,但由于声明变量而出现语法错误。我使用的mysql版本是5.5.43,我的过程是: 我得到了这个错误: 请帮助删除此语法错误。

  • 问题内容: 因此,当我想添加外键时出现错误。我在带有EER图模型的MySQL Workbench中添加了外键。工作台尝试添加的行是: 我得到的错误是: 我搜索了解决方案,发现括号很重要或反引号,但是由于代码是由该工具创建的,因此对我来说似乎是正确的。是什么导致错误? 问题答案: 对于任何看此的人,都可以在EER图模型窗口中设置要用于生成SQL脚本的MySQL版本。转到“编辑”,“首选项”,然后是“

  • 我是SQL新手,正在尝试创建一个如下的模式。然而,我似乎不能正确获得成员表的外键。我试着在表创建后添加它,最初似乎工作正常,但现在当我试图添加一个测试数据行时,我得到了这个错误。 我敢肯定,这是我错过的非常愚蠢的事情,但如果有人能指出我做错了什么,那就太好了! 错误代码:1452。无法添加或更新子行:外键约束失败 (。,CONSTRAINTFOREIGN KEY()REFERENCES()) 无法

  • 问题内容: 我在Docker容器中有一个MySQL数据库。入口点执行创建数据库的脚本和创建表的脚本。 除了一张桌子,其他所有东西都工作正常。 记录到控制台的错误是 第150行是后面的开括号 MySQL版本:8.0.3-rc-log 主机操作系统:Debian jessie 我开始考虑并且可能是保留关键字,因此我重命名了表和列,但错误仍然存​​在。 问题答案: @Bill Karwin在第一条评论中

  • 我试图使用servlet将行插入到表中,当尝试使用语句(使用insertQuery1和insertQuery2)进行插入时,它执行良好,但当使用preparedstatment(使用insertPrepQuery)执行时,它抛出SQL语法错误。代码: 错误:

  • 同时添加外键关系MySQL给出: 我有2个表,试图给外键与其他的关系,但它给下面的错误。 错误1005:无法创建表'yellowbikes.#sql-1e8_82'(errno: 121) SQL声明: 错误:运行故障回复脚本时出错。详情如下。 错误1050:表“计划”已存在 SQL声明: