source

작성 테이블 쿼리에서 외부 키 제약 조건을 작성하려고 할 때 SQL 구문 오류 1064

manysource 2023. 9. 12. 20:05

작성 테이블 쿼리에서 외부 키 제약 조건을 작성하려고 할 때 SQL 구문 오류 1064

다음 쿼리를 사용하여 두 개의 테이블을 만들려고 합니다.

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/DEELETE 부분을 제거하고 로그온 테이블의 person_id 열 이름을 다른 것으로 변경하여 사용자 테이블의 열과 모호하지 않도록 했지만 운이 없었습니다.
MariaDB의 문서를 살펴보니 구문이 정확해 보입니다.이제 왜 이게 안 되는지 모르겠어요.
무슨 생각 있어요?

MariaDB v10.4.12와 HeidiSQL v11.0.0.5919를 사용하고 있습니다.

팬시팬츠는 댓글로 다음과 같이 답했습니다.

당신의CREATE TABLE문장은 열 주위에 괄호를 붙입니다.FOREIGN KEY (person_id) REFERENCES

언급URL : https://stackoverflow.com/questions/63655765/sql-syntax-error-1064-when-trying-to-create-a-foreign-key-constraint-in-a-create