ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 인턴 Day17 (MySql ON DELETE CASCADE / AUTO_INCREMENT 초기화)
    카테고리 없음 2022. 5. 11. 15:37

    0. Day17

    - 배운 것 

    1. MySql ON DELETE CASCADE

    3학년 때 데이터 배이스 설계와 질의 시간에 on delete cascade에 대해서 배웠는데 그때는 그게 무엇을 의미하는지 정확하게 이해하기는 어렵다. 그냥 그렇대... 수준. 근데 DB에 데이터를 넣어보고 테이블 끼리 서로 연결해보고 하면서 어디에 쓰이는지 그 의미를 알아가고 있다.

     

    1. MySql ON DELETE CASCADE

    TB_BOARD 라는 게시판 관리 테이블이 있다.

    TB_REPLY 라는 게시판 속에 댓글 관리 테이블이 있다. 

    만약 ID가 1인 게시판이 있고 거기에 댓글이 달려있을 때, 게시판을 삭제하면 그 게시판에 달린 댓글도 함께 DB에서 삭제되어야 한다. 그렇게 만들기 위해 사용하는 것이 ON DELETE CASCADE

     

    ALTER TABLE TB_REPLY
    	ADD CONSTRAINT FK_TB_BOARD_REPLY 
    		FOREIGN KEY(BNO) REFERENCES TB_BOARD(BNO) 
    	ON DELETE CASCADE

    대신 쿼리를 작성할 때 조건이 있다. 

    • 참조하는 키는 Primary key 또는 Unique key 여야 한다.
    • 참조 받는 테이블에 데이터가 먼저 들어가 있으면 안된다. (그래서 항상 테이블 처음 만들 때 넣어 줘야 한다는 사실을 뒤늦게 알게 됨.)
    • 참조 받는 테이블의 키는  Primary key인지 아닌지 상관없음. 
    • 같은 데이터형이어야 함.

    2. AUTO_INCREMENT 초기화

    ALTER TABLE `TB_REPLY` AUTO_INCREMENT=1;
    SET @COUNT = 0;
    UPDATE `TB_REPLY` SET RNO = @COUNT:=@COUNT+1;

    TB_REPLY 테이블의 RNO 값을 1부터 시작하게 조정. 

     

    3. 게시판 글 삭제시 BNO

    게시판 번호를 BNO라고 할 때 만약 게시판 글이 5개가 있을 때 그 중간 게시글을 하나 삭제한다고 하자. 그래도 BNO는 업데이트 하지 않는다. 만약 업데이트를 해버리면 그 BNO와 관련되어있는 다른 모든 요소들도 수정해줘야 하는데 그렇게 되면 일이 너무 커진다. 실제로 네이버 카페도 인덱스를 다시 업데이트 하진 않았다. 

     

    네이버 카페 INDEX

    댓글

Designed by Tistory.