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

Posted

技术标签:

【中文标题】在 MYSQL 中声明 FOREIGN KEYS 时出现语法错误(使用 innoDB)【英文标题】:Getting syntax error when declaring FOREIGN KEYS in MYSQL (using innoDB) 【发布时间】:2014-04-08 07:40:13 【问题描述】:

我有以下表格:

如果不存在则创建表books (

book_idvarchar(50) 非空,

book_titlevarchar(50) 非空,

courseidvarchar(50) 非空,

外键 ('courseid') REFERENCES 'course'('course_id') ON DELETE CASCADE

) ENGINE=InnoDB 默认字符集=latin1;

如果不存在则创建表course (

course_idvarchar(50) 非空,

yearvarchar(50) 非空,

sectionvarchar(50) 非空,

主键 (course_id)

) ENGINE=InnoDB 默认字符集=latin1;

我想让 courseid(books 表下) 成为一个外键引用 course_id(course 表下),但收到以下错误消息:

**#1064 - 您的 SQL 语法有错误;检查与您的 mysql 服务器版本相对应的手册,以获取在“courseid”附近使用的正确语法) 参考“课程”(“课程ID”)

) ENGINE=InnoDB DEFAULT CHARS' 在第 15 行**

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

我正在使用 Xamp WITH Server 版本:5.5.32 - MySQL Community Server (GPL)。

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

谢谢

【问题讨论】:

编辑:语法错误已修复,但现在我收到此错误:“#1452 - 无法添加或更新子行:外键约束失败 (testlib2.books, CONSTRAINT books_ibfk_1 FOREIGN KEY (courseid ) REFERENCES course (course_id) ON DELETE CASCADE)" NVM .. 修复它。必须为每个引用键添加值 【参考方案1】:

使用反引号`代替单引号也先创建课程表然后创建书籍表以便书籍表可以指向课程表

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

【讨论】:

我认为我的语法问题已解决,但现在我收到以下错误:“#1452 - 无法添加或更新子行:外键约束失败 (testlib2.books,约束books_ibfk_1外键(courseid)引用coursecourse_id)删除级联)"【参考方案2】:

简单地说:

您的代码:

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

改变:

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

你必须创建课程主键表(course_id),然后才应该创建参考书籍外键表(courseid) .

【讨论】:

以上是关于在 MYSQL 中声明 FOREIGN KEYS 时出现语法错误(使用 innoDB)的主要内容,如果未能解决你的问题,请参考以下文章

MySQL Workbench:TroubleShooting Keys

为啥 SQLite pragma foreign_keys 在数据库连接中不持久?

Flask foreign_keys 仍然显示 AmbiguousForeignKeysError

Laravel 6 PHPUnit 测试 - 找不到驱动程序(SQL:PRAGMA foreign_keys = ON;)

sql tsql__find_all_foreign_keys.sql

[PostgreSQL] Use Foreign Keys to Ensure Data Integrity in Postgres