DB 사용하기 - MySQL

현준·2021년 1월 9일
0

GoServer

목록 보기
3/3

to do list 의 여러 정보들을 저장하기 위해 Database를 사용한다.

우선 MySQL을 설치하고 MySQL Command Line Client를 실행시킨다.

root로 로그인하고 tododb 라는 database를 생성한다.

CREATE DATABASE tododb;

1. Create

Table 생성은 todolib/mysql.go 에서 처리해보았다.

func DbInit() {
	db, err := sql.Open("mysql", "root:0000@tcp(127.0.0.1:3306)/tododb")
	if err != nil {
		log.Fatal(err)
	}
	defer db.Close()
	log.Println("db open complete")

	_, err = db.Exec("DROP TABLE IF EXISTS version")
	if err != nil {
		log.Fatal(err)
	}
	log.Println("db drop complete")

	_, err = db.Exec("CREATE TABLE version (id serial PRIMARY KEY, version VARCHAR(10), name VARCHAR(10), updateTime INTEGER)")
	if err != nil {
		log.Fatal(err)
	}
	log.Println("db table create complete")
}

sql.Open으로 db파일을 열고 이미 생성되어있는 version table이 있으면 제거한 뒤 새로운 version table을 생성한다.

최신 어플리케이션의 apk 파일이 업데이트 되면 version table도 업데이트 시켜, client가 현재 버전과 최신 버전을 비교할 수 있도록 한다.

column 목록은 id, version, name, updateTime 이 있다.

id는 해당 데이터(row)의 기본 KEY이고, updateTime은 업데이트 시간(UNIX time)을 기록하기 위해 INTEGER형을 사용했는데, 추후 modify 명령으로 string을 사용할 수 있다.

2. Insert

생성된 테이블에 데이터를 입력하는 함수에서도 마찬가지로 sql.Open() 함수로 db를 열고,

result, err := db.Exec("INSERT INTO version(version, name, updateTime) VALUES (?, ?, ?)",arg.Version, arg.Name, arg.UpdateTime)
	if err != nil {
		log.Fatal(err)
	}

INSERT 명령으로 데이터를 입력한다. '?' 기호를 C언어의 형식자처럼 사용할 수 있다.

3. Query

입력한 데이터를 불러오는 방법은 Select 명령을 사용한다.

	var getData string
	err = db.QueryRow("SELECT " + col + " FROM "+ table +" ORDER BY id DESC").Scan(&getData)
	if err != nil {
		log.Fatal(err)
	}
	return getData

어떤 테이블에서 어떤 column의 데이터가 필요한지 매개변수로 받아, SELECT 한다.

이 때, 마지막으로 업데이트된 버전의 데이터가 필요하니 ORDER BY id DESC조건으로 내림차순으로 정렬된 id 중 첫번째 행의 데이터만 불러온다.

4. Delete

최신 버전을 가지고 있는 행을 제외한 나머지 행을 모두 제거한다.

_, err = db.Exec("DELETE FROM version WHERE version != ?", arg)
if err != nil {
	log.Fatal(err)
}

최신 버전을 매개변수로 받아서 WHERE 조건문으로 사용한다.

profile
github.com/hjyoun0731

0개의 댓글