- 참조관계 알아보기
1:1관계
블로그를 비유로
1명의 회원은 하나의 블로그만 소유할 수 있다
1:N관계
게시판을 비유로
1명의 회원은 여러개의 글을 쓸 수 있다 , 1명의 회원은 여러개의 댓글을 쓸 수 있다
N:1 관계
비유가 없다
정말 잘 쓰지 않는다
N:M관계
매우 복잡하기 때문에 잘쓰지 않는다
대부분 N:1 , 1:M 관계로 분리하고 분리하
- 참조관계 알아보기 - 특징
참조관계가 맺어진 후에 부모테이블 삭제하는 경우 삭제 불가능하다
그렇기 때문에 자식 테이블도 삭제해야 삭제가 가능하다
- 참조관계 실습
constraint fk_comment1 foreign key(board1_id) references board1(id)
-- constrint fk_commnet1 foreign key(board1_id)
-- comment 테이블안에 컬럼 board1_id을
-- references board1(id)
-- board1 테이블 안에 컬럼 id를 참조하게한다
-- 부모 데이터 삭제
-- 1,2번게시글에는 댓글이 있고 , 3,4번 게시글에는 댓글이 없음
-- 3번 게시글 삭제
delete from board1 where id =3;
-- 삭제를 할때는 꼭 해당 테이블의 고유한 pk를 가지고 삭제를 한다
-- 2번 게시글 삭제
delete from board1 where id =2;
-- comment board1_id가 board1에 있는 id컬럼을 참조하고 있기 때문에 삭제 불가
-- 2번 게시글에 작성된 댓글 삭제 (댓글번호 3) 후 2번 게시글 삭제
delete from comment1 where id =3;
delete from board1 where id =2;
부모테이블을 자식테이블이 참조하면
컬럼끼리도 부모 자식으로 참조가 된다는 걸 알 수 있다
- 참조관계 - on delete cascade
constraint fk_comment2 foreign key(board2_id) references board2(id) on delete cascade
-- on delete cascade : 부모데이터 삭제시 자식 데이터도 함께 삭제
-- 단 , 테이블은 전과 마찬가지로 참조하는 테이블이 없어야 삭제 가능하다
- 참조관계 - on delete set null
constraint fk_comment3 foreign key(board3_id)
references board3(id) on delete set null
-- on delete set null : 자식 데이터는 유지되지만 참조 컬럼은 null로 바뀜
- 참조관계 - 수정 쿼리
update board3 set board_contents = '안녕하세요' where id = 1;
컬럼에 데이터를 수정하기 위해서 pk로 지정된 컬럼이 필요하다
없다면 모든 정보가 수정되기 때문에 꼭 컬럼의 고유한 pk데이터가 필요하다
- 참조관계 - 자동번호 적용하기
id bigint auto_increment
auto_increment : 자동으로 값이 1씩 증가
id 에 auto_increment 를 적용하였기 때문에 insert 단계에서도 작성하지 않는다
auto_increment는 고유한 값에만 적용 가능하다 즉, pk를 적용하지 않으면 사용할 수 없다
- 자투리 - 안전 삭제
-- 삭제 : 그냥 삭제
drop table board1;
-- 안전 삭제 : 있으면 지우고 없으면 말고
drop table if exists board1;
테이블 이름이 겹치는 상황을 방지하기위해 대부분 테이블 위에 drop talbe을 작성해주는데
만약 긴 테이블 쿼리문을 한번에 실행하는경우
그냥 drop talbe을 사용하게되면 에러가 뜨며 그자리에서 멈추기 때문에 drop table if exists를 사용해준다
실제로 drop table보다 drop table if exists를주로 사용한다
'나의 수업일지' 카테고리의 다른 글
인천 일보 아카데미 29일차 / 페이징(limit) / 게시판의 구성 / DB의 행동 구조 (0) | 2023.04.03 |
---|---|
인천 일보 아카데미 28일차 - table 구조 변경 alter / ERD보는법 (0) | 2023.03.31 |
인천 일보 아카데미 27일차 -2- ERD란 ? / ERD 만들어보기 (0) | 2023.03.30 |
인천 일보 아카데미 26일차 -2-서브쿼리 응용 / 제약조건 / 제약조건 확인 (0) | 2023.03.29 |
인천 일보 아카데미 26일차 -1-그룹핑_having / date타입 문자표현 / 조인(join) / 서브쿼리(sub_query) (0) | 2023.03.29 |