【发布时间】: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