본문 바로가기

프로젝트

mysql) TodayILearn

자신이 아는 것을 공고히 다질수 있는 방법은 프로젝트를 만들어보는 것이라고 한다.

얼마전에 배운 MySQL 데이터베이스 기술을 복습하고 싶어서 간단한 프로젝트를 결심하게 되었다.

데이터를 구조화된 틀 안에 넣어 깔끔하게 정리정돈 한 것이 표이고

그러한 표들을 모아두는 표의 집합이 데이터베이스라고 나는 이해했다.

따라서 매일 공부한 내용을 작성하는 todolist 표를 만들고

그 표들을 모아두는 "TodayILearn" 데이터베이스를 구상해보았다.

만들어진 데이터베이스 안에서 select * from 날짜를 쓰면 그 날짜에 공부한 것들을 한 눈에 볼 수 있으면 좋겠다.

우선 TodayILearn 데이터베이스를 만들었다.

그 다음에는 테이블(표)를 만드려고 했는데, 테이블의 이름으로는 숫자를 사용할 수 없다고 한다.

대신 1221을 쓰고 싶다면 '1221' 형식으로 가능하다고 하는데 나는 그렇게 해도 에러가 났다.

그래서 앞에 day를 붙이고 날짜를 작성하는 방식으로 수정했다. 역시 프로그램은 설계대로 되기 어려운것 같다.

day211221 테이블을 만들고 컬럼을 추가했다.

테이블 안에는 데이터들이 들어가는데, 이 데이터들을 row(열) 이라고 하고 row들을 묶어놓는 것이 컬럼(column)이다. 

사과, 포도, 바나나가 과일 안에 들어가는 것처럼 말이다.

 

식별자로 id값을 주고 데이터가 추가되면 auto_increment로 자동으로 값이 1씩 증가되도록 하였다.

오늘 날짜를 적는 date,

오늘 한 일을 적는 todolist,

작성날짜를 적는 writedate,

완료여부를 체크하는 complete 컬럼을 만들었다.

  • date는 date타입으로 yyyy-dd-mm 형식으로 데이터를 적는다.
  • todolist는 varcahr타입으로 문자 데이터타입이다. 긴 글을 작성할땐 text 데이터타입을 쓰기도 한다.
  • writedate는 datetime타입이다.
    • date타입은 yyyy-mm-dd 형식, datetime 타입은 yyyy-mm-dd HH:MM:SS 형식이다.
    • timestamp 타입도 있는데 날짜와 시간을 모두 포함하는 datetime타입 형식과 비슷하며, datetime타입은 입력해줘야 하지만 입력하지 않아도 자동으로 설정된다.
    • datetime타입에서 now()값을 주면 현재 시간으로 설정된다.
  • complete는 tinyint타입이다. mysql은 boolean타입으로 tinyint를 쓰며, true 혹은 false를 뜻하는 1과 0이 온다.

이렇게 컬럼과 테이블이 만들어졌다. desc 키워드를 쓰면 테이블 안의 컬럼을 확인할 수 있다.

 

이제 표 안에 데이터를 넣어보자. 표 안의 각각의 컬럼에 해당하는 데이터를 추가하는 것이다.

만들어진 컬럼 안에 데이터를 넣기 위해서는 insert into 키워드를 사용한다.

이렇게 테이블 안에 첫번째 데이터가 들어갔다.

select * from 키워드로 표 안에 담긴 데이터를 확인할 수 있다.

두번째 데이터도 넣어보았다.

 

하지만 상당히 비효율적이라는 생각이 들었다.

  • 우선 같은 날짜인데 일일이 날짜를 작성해줘야 한다. 테이블 이름도 211221인데 말이다.
  • writedate 컬럼도 datetime대신 timestamp 타입을 사용하면 따로 작성해주지 않아도 될 것 같다.
  • 데이터를 추가한다면 간단하게 todolist와 complete만 작성하면 좋을것 같다. 프로그램은 간단할수록 좋은게 아닐까?

우선 alter drop 키워드로 date와 writedate 컬럼을 삭제했다.

그 다음엔 alter add 키워드로 writedate 컬럼을 새로 추가했다.

타입은 timestamp으로 바꿔서 after 키워드로 todolist 다음에 추가

시간이 0000-00-00으로 초기화 되어있다. 내가 기대한건 자동으로 현재 시각으로 시간이 설정되는 것이였는데..

데이터를 새로 추가하면 현재 시간으로 설정이 될까?

writedate 컬럼이 not null인데 null값이라 에러가 났다. 그래서 컬럼을 지우고 null값을 허용하도록 다시 만들었다.

그랬더니 값을 안적어주면 현재 시간으로 자동 설정되지 않고 null 값으로 들어간다.

아무래도 내가 timestamp에 대해 잘못 이해했었나보다.

 

그냥 datetime 데이터타입을 쓰고 now() 키워드로 현재시간을 설정하는 것으로 바꿨다.