【问题标题】:SQL syntax error 1064 when trying to create a foreign key constraint in a create table query尝试在创建表查询中创建外键约束时出现 SQL 语法错误 1064
【发布时间】:2020-08-30 17:36:30
【问题描述】:

我正在尝试使用以下查询创建两个表:

DROP TABLE IF EXISTS person;
CREATE TABLE person (
    PRIMARY KEY (person_id),
    person_id INT NOT NULL AUTO_INCREMENT
)
ENGINE InnoDB CHARSET utf8 COLLATE utf8_unicode_ci
COMMENT "A list of people.";

DROP TABLE IF EXISTS logon;
CREATE TABLE logon (
    PRIMARY KEY (logon_id),
    logon_id  INT NOT NULL AUTO_INCREMENT,
    person_id INT NOT NULL,
              UNIQUE INDEX person_id (person_id),
              CONSTRAINT fk_logon_has_person
              FOREIGN KEY person_id REFERENCES person (person_id)
              ON UPDATE CASCADE
              ON DELETE RESTRICT,
    passwd    CHAR(60) NOT NULL
)
ENGINE InnoDB CHARSET utf8 COLLATE utf8_unicode_ci
COMMENT "Available logins for people.";

在 HeidiSQL 上运行这个查询给了我这个错误:

/* SQL Error (1064): You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near 'REFERENCES person (person_id)
              ON UPDATE CASCADE
              ON' at line 7 */

我完全删除了外键约束部分,查询执行得很好。
然后我在 HeidiSQL 中手动添加了外键,生成了这个查询:

ALTER TABLE `logon` ADD CONSTRAINT `fk_logon_has_person` FOREIGN KEY (`person_id`) REFERENCES `playground`.`person` (`person_id`) ON UPDATE CASCADE ON DELETE RESTRICT;

我试图用它的语法(从 ADD 开始,用 `s)替换我的创建表查询的约束,但错误仍然出现。
我还尝试删除 ON UPDATE/DELETE 部分,并将登录表的 person_id 列名称更改为其他名称,以便它与 person 表的列不存在歧义,但没有运气。
我查看了MariaDB's documentation,语法对我来说是正确的。现在我不知道为什么这不起作用。
有什么想法吗?

我正在使用 MariaDB v10.4.12 和 HeidiSQL v11.0.0.5919。

【问题讨论】:

  • 在您的 CREATE TABLE 语句中将括号括在列周围:FOREIGN KEY (person_id) REFERENCES
  • 好的,现在我感到很不好意思 :D 谢谢! @fancyPants

标签: mysql mariadb


【解决方案1】:

fancyPants in the comments回答:

在您的 CREATE TABLE 语句中,在列周围加上括号:FOREIGN KEY (person_id) REFERENCES

【讨论】:

  • 我似乎无法将fancyPant 的评论标记为答案,所以我按照in this thread 的指示做了。 @forpas
  • 该链接是正确的:您始终可以自己发布一个引用评论并将其标记为已接受的答案。但是这个:“由cmets中的fancyPants回答。”不是答案。无论如何,该帖子已由版主编辑,现在您可以接受它以表明问题已解决。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-07
  • 1970-01-01
  • 2017-12-31
  • 1970-01-01
  • 2012-10-22
相关资源
最近更新 更多