골방러와 함께 만드는 PHP 메모게시판

DB에 메모 작성하기 - 1

본 토픽은 현재 준비중입니다.공동공부에 참여하시면 완성 되었을 때 알려드립니다.

안녕하세요.

메모할 사항을 수첩에 적게되면 수첩에 적은 내용이 남겠지요.

그것처럼 언제든 꺼내 볼 수 있는 수첩의 역할을 하는 것이 데이터베이스 입니다.

 

많은 데이터베이스의 종류가 있는데요. 무료데이터베이스인 mysql을 이용해서 메모게시판의 DB를 만들 예정입니다. 실무에서는 mysql이 별로 안쓰인다고 하는데. 저는 잘 모르겠습니다. mssql 이나 오라클이 사용된다고 하더군요.

 

일단 데이터베이스는 데이터베이스라는 큰 틀이 있고, 그 안에 테이블이 있습니다.

데이터베이스가 건물이라고 치면 테이블은 사무실이라고 보면 되겠네요.

 

일단 데이터베이스를 켜 봅니다.

데이터베이스에 관한 글은 아래의 링크를 확인하세요.

 

https://opentutorials.org/course/1688/9337

윈도우에 웹서버 설치하기

https://opentutorials.org/course/1688/9386

데이터베이스 이론

 

데이터베이스를 실행시키는 방법은

윈도우에서는 시작버튼 누르고 프로그램 및 파일검색창에서 cmd 라고 치고 엔터를 칩니다.

그러면 요래 씨꺼먼 화면이 나옵니다.

이걸 콘솔창이라고 합니다.

초딩때 게임할때 많이 썼었습니다... 어쨌든.

위 콘솔창에서 로컬 웹서버가 설치 되었으면,

mysql -u root -p

라고 입력하고 비밀번호를 입력해주세요.

 

그러면 mysql>이라고 뜨고 커서가 깜빡깜빡일겁니다.

거기에서 show databases라고 쳐주세요. 

데이터베이스들의 목록을 보는 명령어 입니다.

 

목록들을 보았으니, 이제 나도 데이터베이스를 만들어보죠.

데이터 베이스를 만드는 방법은 mysql에서는 

create database reply;

입니다. 참 쉽죠?

 

만들면 뭐하나요. 써봐야지. 

mysql> use reply; 

라고 쳐줍니다.

이 뜻은 reply 데이터베이스를 사용할거야. 라고 하는 뜻입니다.

 

Database changed 라고 응답을 주네요.

 

이제 테이블을 만들어 봅시다.

자~ 따라해보세요.

참고) ` 라고 나오는 따옴표는 숫자키1 왼쪽에 있는 따옴표입니다. 그냥 누르세요.(쉬프트 누르지마시고)

` 와 ' 를 구분하셔야 합니다. 쿼리문을 잘 보세요 `는 숫자키 옆에 있는 거고 '는 엔터키 옆에 있는 따옴표입니다. single quote라고도 합니다.(이정도는 교양으로ㅎㅎ)

 

create table rep(`c_idx` int(11) primary key auto_increment, `re_dep` varchar(5) , content text, reg_date datetime , ip varchar(16) , `c_id` int(11) , `nick` varchar(50)) character set='utf8' collate='utf8_general_ci';

 

뭔가 꼬부랑 글씨가 있는데 머리가 복잡하시죠..? 하나하나씩 읽어보죠.

create table 테이블명 (

만든다! 테이블을! 테이블명! -> 이해 가시죠? ㅎㅎㅎ

 

다음은..

-> `c_idx` int(11) primary key auto_increment

c_idx 라는 컬럼을 만듭니다. 숫자형식으로요 (11) 11자리까지 가능한 용량으로요

primary key -> 일종의 주민등록번호 같은 개념입니다. 고유한 숫자를 나누어 줄 수 있도록 하는 명령입니다.

우리동네에 김백수와 김백수가 있다고 하면 김A백수와 김B백수를 사람들이 김백수라고 부른다면 둘의 차이를 못찾을 것입니다. 이렇게 김백수와 김백수를 나누어서 기억하도록 하는것이 primary key 입니다

auto_increment -> 자동적으로 증가하게 만듭니다

왜 이걸 쓰느냐면 게시글번호가 계속 증가되어야만 그 위에 글을 쓰고 또 글을 쓰고 할수 있기 때문입니다.

만약에 auto_increment가 없다면.

1 김백수의 하루 : 길에서 천원을 주워서 빵을 사먹었다. 일기 끗.

라고 일기를 쓴뒤, 다음날 일기를 쓴다면,

다음장에 쓰지 않고 그 페이지에 덮어서 써버립니다.

1 김백수의 하루 : 길에서 천원을 주워서 빵을 사먹었다. 일기 끗.2 김백수의 다음날 : 엄마한테 혼났다. ㅜㅜ 일기끗.

이런식으로 일기가 겹쳐지게 쓰기 때문에 평생도록 게시글이 1인 알뜰한 데이터베이스가 되어 그 기능을 사용하지 못합니다.

 

 

다음은.

`re_dep` varchar(5)

re_dep이라는 컬럼은 게시글의 순위를 나타내는 것입니다.

varchar는 문자를 뜻하죠.

첫 메모가 있고 두번째 메모가 그것에 대한 리플이라면.

 

예: 

전지현 : 에효~ 오늘 슬픔.ㅜㅜ    ---- A

  ㄴRe: 복학생 : 무슨일 있어?           -----AA

      ㄴRe: 전지현 : 안알랴줌.             -----AAA

  ㄴRe: 물고기1: 무슨일 있어?          -----AB

  ㄴRe: 물고기2: 무슨일임?              -----AC

 

이런 댓글이 있다면 순서가 위의 알파벳처럼 됩니다.

첫번째 순서인 글은 A 그것에 달리는 댓글은 AA 이런식이죠.

이건 왜 필요할까요?

댓글을 표시할때 순서를 정렬하기 위해서 입니다.

 

그 다음은.

content text

컨텐트 라는 컬럼에 들어갈 내용은 엄청 길 수도 있기때문에 text라는 데이터타입을 지정해주었습니다.

varchar처럼 글자수의 제한이 있는것이 아닌 많이 쓸 수 있도록 하는 것입니다.

 

그 다음은.

reg_date datetime

reg_date 는 댓글을 저장한 날짜 시간을 나타냅니다. 

2015-08-20 21:32:29 이런 식으로 말이죠

시간을 나타내서 사용할 경우에 사용합니다.

날짜만 사용할 경우에는 date를 사용해도 무방합니다.

 

그다음은

 ip varchar(16)

아이피 주소를 저장하는 칼럼입니다. 키보드 워리어들의 ip주소를 저장해서 차단시키던지 할때 쓰이겠죠?

 

그 다음은.

`c_id` int(11)

c_id 라는 컬럼은 c_idx와 비슷해 보이지만 다릅니다.

c_id 는 댓글이 달렸을 경우에 그 부모글의 c_idx값을 갖게 됩니다.

 

예:

전지현 : 에효~ 오늘 슬픔.ㅜㅜ    ---- A   ,   c_idx =1, c_id=1

  ㄴRe: 복학생 : 무슨일 있어?           -----AA    , c_idx=2, c_id=1

      ㄴRe: 전지현 : 안알랴줌.             -----AAA , c_idx=3, c_id=1

  ㄴRe: 물고기1: 무슨일 있어?          -----AB   ,  c_idx=4, c_id=1

  ㄴRe: 물고기2: 무슨일임?              -----AC   , c_idx=5, c_id=1

모쏠남 : 여자인간과 말해본지가 언제던가.    --- A     , c_idx=6, c_id=6

모쏠남2 : 내여친은 모니터속에 있다능 웅킼킼    --- A     , c_idx=7, c_id=7

   ㄴRe: 야메롱! 모 야메롱다!                         ----AA   , c_idx=8, c_id=7

 

이런식으로 관계가 된 글끼리 모아주는 역할을 하는게 c_id입니다.

c_id가 같은것끼리 모아주고 그 사이에서 re_dep의 알파벳을 길이 순과 순서순으로 정렬하면, 댓글리스트가 되겠죠? 나중에 더 자세히 실습해봅시다.

 

그다음은.

`nick` varchar(50)

닉네임 컬럼입니다. 이젠 다 알죠? ㅋㅋㅋ

 

마지막으로 멘붕의 

 character set='utf8' collate='utf8_general_ci'; 입니다.

character set  은 이 테이블에서 사용할 문자셋입니다.

컴퓨터는 흑형도 쓰고 백형도 쓰고 한국형도 씁니다.

그러기에 문자를 표현하고자 문자셋을 지원하게 되었습니다.

결국 문자열이나 명령어들은 16진수나 2진수로 표현되는데요. 이것을 언어간에 겹치지 않게 지정한것을 문자셋이라고 합니다.

예전에는 euckr이라는 한국어만의 문자셋이 있어왔는데. 요즘엔 utf8라는 문자셋으로 많은 문자셋을 같이 사용할 수 있어 문자깨짐등의 문제를 없애주게 되었습니다.

데이터베이스 이전시 잘 맞춰주어야 합니다. 그래야 안깨져요.. 뿕낡뼑 이런 글자가 안뜨게요.

 

collate는 콜레이션이라고 부르는것인데요. 

이것은 무엇이냐.

mysql 내부에서 문자열끼리 비교할때 사용되는 문자셋을 나타냅니다.

위에서 예를 들어 A와 AA를 비교할때 누가 우선순위에 오를것인가?에서 A,AA순서로 나왔듯이

특정 문자셋을 이용해 정렬하기 위해서 사용합니다.

collate는 utf8의 경우에는 utf8_general_ci 와 utf8_unicode_ci가 있다고 합니다.

둘의 차이점은 정확도와 속도 차이 라고 합니다.

속도가 빠른것은 utf8_general_ci 라고 하기에 여기에서는 이것을 사용합니다.

정확도는 utf8_unicode_ci가 더 정확하다고 합니다.

 

이정도쓰고 나니... 저의 저질체력이 방전되기 시작합니다.

대충 이해 되셨죠?

 

위의 쿼리문을 입력하고 마지막으로 확인 해봅시다.

mysql> desc reply;

 

하면 어떤 컬럼들이 있는지 나올겁니다.

+----------+--------------+------+-----+---------+----------------+
| Field    | Type         | Null | Key | Default | Extra          |
+----------+--------------+------+-----+---------+----------------+
| c_idx    | int(11)      | NO   | PRI | NULL    | auto_increment |
| re_dep   | varchar(20)  | NO   |     | NULL    |                |
| content  | text         | NO   |     | NULL    |                |
| reg_date | datetime     | NO   |     | NULL    |                |
| ip       | varchar(16)  | NO   |     | NULL    |                |
| c_id     | int(11)      | NO   |     | NULL    |                |
| nick     | varchar(255) | NO   |     | NULL    |                |
+----------+--------------+------+-----+---------+----------------+
 
이런식으로요...
이렇게 확인해보고 뿌듯해 하면 오늘의 수업은 끝입니다.
다음에 올게요!
  • 봤어요 0명

댓글

댓글 본문