尝试在创建表查询中创建外键约束时出现SQL语法错误1064

时间:2020-08-30 09:04:41

标签: mysql mariadb

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

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。

1 个答案:

答案 0 :(得分:0)

fancyPants in the comments回答:

在您的CREATE TABLE语句中,将括号括在列中:FOREIGN KEY (person_id) REFERENCES