테이블 정리 #4

jh_leitmotif·2021년 7월 15일
0

🧐 개요

CRUD 게시판을 만들면서 MySQL에서 뚱땅거린 것을 기록하는 포스트입니다.

📋 board 테이블 만들기

CREATE TABLE board
(
	idx int AUTO_INCREMENT PRIMARY KEY ,
    name varchar(50),
    title varchar(50),
    content mediumtext,
    regdate datetime,
    modidate datetime,
    hit int,
    recommend int,
    nick varchar(50)
)

ALTER TABLE board 
ADD CONSTRAINT userID FOREIGN KEY(name) 
REFERENCES users(ID) ON DELETE CASCADE;

board 테이블의 idx는 작성될 때마다 자동으로 증가되도록 AUTO_INCREMENT를 가집니다.

회원 ID 컬럼과 board 테이블의 name끼리 참조를 맺고
위의 쿼리와 같이 ON DELETE CASCADE 처리를 통해 회원 탈퇴시 해당 회원의 작성글들이 연계되어 삭제되도록 했습니다.

완성된 board 테이블 구조입니다.

📋 users 테이블

이전 포스트와는 다르게, ID 별 닉네임을 설정할 수 있도록 컬럼을 추가했습니다.

🎯 AUTO_INCREMENT 초기화

게시판을 구현하고 CRUD 테스트 진행 중

위와 같이 번호가 스킵이 되는 현상이 발생했습니다.

해당 현상을 해결하는 쿼리는 아래와 같습니다.

SET @COUNT =0; // A
UPDATE board SET board.idx = @COUNT:=@COUNT+1; // B
ALTER TABLE board AUTO_INCREMENT=?; // C

A에서 @는 SQL 쿼리 내 변수 선언 기호입니다. 즉, COUNT란 변수에 0을 넣습니다.

B는 board 테이블의 idx 컬럼 값을 0부터 증가시키며 변경합니다.

C는 다음 자동으로 증가될 AUTO_INCREMENT를 사용자가 직접 지정합니다.
예를 들어 현재 게시글 번호가 3이라면 '?'엔 3보다 큰 숫자만 지정할 수 있습니다.

상단의 쿼리를 통해 잘 정리된 것을 볼 수 있습니다.
만약 AUTO_INCREMENT=10 이라고 한 뒤 글을 쓰면 다음과 같이 나옵니다.

🎯 MySQL Safe mode 해제

SET @COUNT =0;
UPDATE board SET board.idx = @COUNT:=@COUNT+1;

위의 UPDATE 문은 테이블의 전체 컬럼을 변경합니다.

이에 대해 MySQL은 기본적으로 Safe mode가 지정되어있어 WHERE절이 없으면 쿼리 실행을 막아버립니다.

you are using safe update mode.... 라는 문장이 나오며,

상단 Edit > Preference > SQL Editor > Safe Updates 체크 해제

를 통해 해제하여 해결했습니다.

물론 해당 기능 이용 후 다시 체크했습니다. 언제나 전체 삭제는 무섭습니다..


현재 CRUD 게시판 및 페이징까지 모두 완료한 상태로 각 기능별로 post를 업로드할 예정입니다.

대부분 알아서 궁리했지만, 막히는 부분이 있을 땐 고코더님의 Nodejs 관련 포스트를 읽고 잘 이해할 수 있었습니다. 감사합니다.

profile
Define the undefined.

0개의 댓글