테이블 정리 #4
🧐 개요
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 관련 포스트를 읽고 잘 이해할 수 있었습니다. 감사합니다.
Author And Source
이 문제에 관하여(테이블 정리 #4), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@leitmotif/테이블-정리-4저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)