-
mySQL "cannot add foreign key constraint" 에러개발 2021. 12. 3. 15:22
과제를 하다가 외래키를 참조하는 부분에서 오류가 났다.
'댓글' 테이블 에 외래키를 적용할 때 "cannot add foreign key constraint" 에러가 생겼다.
'댓글' 테이블 에서 "회원아이디"와 "글번호" 속성은 '게시글' 테이블의 "회원아이디"와 "글번호" 속성을 외래키로 참조한다.
'게시글' 테이블의 primary key 를 외래키로 참조해야 했기에 이렇게 설계하였다. '게시글' 테이블의 primary key 는 두 개이다.
이 경우 '댓글' 테이블에서 한 줄에 한거번에 '게시글' 테이블의 primary 키를 외래키로 참조해 주어야 에러가 발생하지 않는다.
에러가 나지 않는 코드:
CREATE TABLE 회원( 회원아이디 VARCHAR(20) NOT NULL, 비밀번호 VARCHAR(20) NOT NULL, 이름 VARCHAR(10), PRIMARY KEY(회원아이디) ); CREATE TABLE 게시글( 회원아이디 VARCHAR(20) NOT NULL, 글번호 INT NOT NULL, 글내용 VARCHAR(100) NOT NULL, 작성일자 DATE NOT NULL, 공개범위 INT NOT NULL DEFAULT 0, PRIMARY KEY(회원아이디, 글번호), FOREIGN KEY(회원아이디) REFERENCES 회원(회원아이디), CHECK(공개범위 IN(-1, 0, 1)) ); -- ########################################## CREATE TABLE 댓글( 회원아이디 VARCHAR(20) NOT NULL, 글번호 INT NOT NULL, 댓글번호 INT NOT NULL, 작성자아이디 VARCHAR(20) NOT NULL, 댓글내용 VARCHAR(50) NOT NULL, PRIMARY KEY(회원아이디, 글번호, 댓글번호), FOREIGN KEY(회원아이디, 글번호) REFERENCES 게시글(회원아이디, 글번호) -- 에러를 수정한 부분 ); -- ########################################### CREATE TABLE 친구맺기( 회원아이디1 VARCHAR(20) NOT NULL, 회원아이디2 VARCHAR(20) NOT NULL, 맺은날짜 DATE, 친한친구설정여부 INT DEFAULT 0 NOT NULL, PRIMARY KEY(회원아이디1, 회원아이디2), FOREIGN KEY(회원아이디1) REFERENCES 회원(회원아이디), FOREIGN KEY(회원아이디2) REFERENCES 회원(회원아이디), CHECK(친한친구설정여부 IN(0, 1)) );
에러가 나는 코드:
CREATE TABLE 회원( 회원아이디 VARCHAR(20) NOT NULL, 비밀번호 VARCHAR(20) NOT NULL, 이름 VARCHAR(10), PRIMARY KEY(회원아이디) ); CREATE TABLE 게시글( 회원아이디 VARCHAR(20) NOT NULL, 글번호 INT NOT NULL, 글내용 VARCHAR(100) NOT NULL, 작성일자 DATE NOT NULL, 공개범위 INT NOT NULL DEFAULT 0, PRIMARY KEY(회원아이디, 글번호), FOREIGN KEY(회원아이디) REFERENCES 회원(회원아이디), CHECK(공개범위 IN(-1, 0, 1)) ); -- ########################################## CREATE TABLE 댓글( 회원아이디 VARCHAR(20) NOT NULL, 글번호 INT NOT NULL, 댓글번호 INT NOT NULL, 작성자아이디 VARCHAR(20) NOT NULL, 댓글내용 VARCHAR(50) NOT NULL, PRIMARY KEY(회원아이디, 글번호, 댓글번호), FOREIGN KEY(회원아이디) REFERENCES 게시글(회원아이디), -- 에러가 나는 부분 FOREIGN KEY(글번호) REFERENCES 게시글(글번호) -- 에러가 나는 부분 ); -- ########################################## CREATE TABLE 친구맺기( 회원아이디1 VARCHAR(20) NOT NULL, 회원아이디2 VARCHAR(20) NOT NULL, 맺은날짜 DATE, 친한친구설정여부 INT DEFAULT 0 NOT NULL, PRIMARY KEY(회원아이디1, 회원아이디2), FOREIGN KEY(회원아이디1) REFERENCES 회원(회원아이디), FOREIGN KEY(회원아이디2) REFERENCES 회원(회원아이디), CHECK(친한친구설정여부 IN(0, 1)) );
참고:
https://hashcode.co.kr/questions/2788/mysql-foreign-key-설정-시-오류가-납니다
MySQL Foreign key 설정 시 오류가 납니다.
두 개의 테이블이 있는데요.부모 테이블의 pk가 두 개일 경우에는 자식테이블 생성에 실패합니다.방법이 있을까요? 부모 테이블의 no 의 경우 형식적인 시퀀스 값 입니다. 시퀀스 값을 포기해야
hashcode.co.kr
여기를 보고 에러를 수정하였다.
'개발' 카테고리의 다른 글
Importing the numpy c-extensions failed Error | 주피터 노트북 넘파이 임포트 에러 (0) 2022.03.25 맥북 다운로드 폴더 아이클라우드에 넣기, 동기화 (0) 2022.03.20 비주얼스튜디오코드 VSC-prolog 사용법(맥북) (0) 2021.09.17 m1 맥북 command not found brew 해결법 (1) 2021.09.17 유니티(Unity) Animation event has no receiver error 에러 (0) 2021.08.23