我正在尝试使用以下查询创建两个表:
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。
答案 0 :(得分:0)
由fancyPants in the comments回答:
在您的
CREATE TABLE
语句中,将括号括在列中:FOREIGN KEY (person_id) REFERENCES