반응형

MySql에서 DML  즉 데이터를 조작하는 방법으로 Insert, Update, Delete 를 사용한다. 

Golang에서는 DML을 사용하기 위해 Exec 함수를 사용한다.

함수의 정보는 아래와 같다.

func (db *DB) Exec(query string, args ...interface{}) (Result, error)

Exec 함수에서 첫번 째 인자로 안에 SQL문을 작성하여 넣어주면 되고 두번 째 인자부터는 SQL안에 들어갈 값을 등록하면 된다. 실행한 후 리턴 값으로는 Result와 error 객체를 리턴한다.

SQL문으로 insert 할 경우

conn.Exec("insert into person (name, phone, address) value ('이순신','02-xxx-yyyy', '서울시 통인동')");

 

SQL문에 들어갈 인자 등록 할 경우

conn.Exec("insert into person (name, phone, address) value (?, ?, ?)", "이순신", "02-xxxx-yyyy", "서울시 통인동");

 

Insert 예제

 

package main

import (
	"database/sql"
	"fmt"
	"os"
	_ "github.com/go-sql-driver/mysql"
)

func main() {
	//conn, err := sql.Open("mysql", "계정명:계정패스워드@tcp(DB주소:DB포트)/데이터베이스명")
	conn, err := sql.Open("mysql", "testuser:test1234@tcp(localhost:3306)/mydb")
	if err != nil {
		fmt.Println(err)
		os.Exit(1)
	}

	result, err := conn.Exec("insert into person (name, phone, address) value ('이순신','02-xxxx-yyyy', '서울시 통인동')")
	if err != nil {
		fmt.Println(err)
		os.Exit(1)
	}

	//RowsAffected() 함수를 통해 insert 한 갯수를 확인한다.
	nRow, err := result.RowsAffected()
	fmt.Println("insert count : ", nRow)

	conn.Close()
}

결과

insert count : 1

update와 delete를 할 때도 동일하게 하면 된다.

Update 예제

package main

import (
	"database/sql"
	"fmt"
	"os"
	_ "github.com/go-sql-driver/mysql"
)

func main() {
	//conn, err := sql.Open("mysql", "계정명:계정패스워드@tcp(DB주소:DB포트)/데이터베이스명")
	conn, err := sql.Open("mysql", "testuser:test1234@tcp(localhost:3306)/mydb")
	if err != nil {
		fmt.Println(err)
		os.Exit(1)
	}

	result, err := conn.Exec("update person set name = '강감찬' where name='이순신'")
	if err != nil {
		fmt.Println(err)
		os.Exit(1)
	}

	//RowsAffected() 함수를 통해 update 한 갯수를 확인한다.
	nRow, err := result.RowsAffected()
	fmt.Println("update count : ", nRow)

	conn.Close()
}

결과

update count : 1

Delete 예제

package main

import (
	"database/sql"
	"fmt"
	"os"
	_ "github.com/go-sql-driver/mysql"
)

func main() {
	//conn, err := sql.Open("mysql", "계정명:계정패스워드@tcp(DB주소:DB포트)/데이터베이스명")
	conn, err := sql.Open("mysql", "testuser:test1234@tcp(localhost:3306)/mydb")
	if err != nil {
		fmt.Println(err)
		os.Exit(1)
	}

	result, err := conn.Exec("delete from person where name='강감찬'")
	if err != nil {
		fmt.Println(err)
		os.Exit(1)
	}

	//RowsAffected() 함수를 통해 update 한 갯수를 확인한다.
	nRow, err := result.RowsAffected()
	fmt.Println("delete count : ", nRow)

	conn.Close()
}

결과

delete count : 1

Exec 함수가 아닌 Query()함수를 이용해서도 가능하며 insert/update/delete 한 갯수를 확인 할 수 없다.

이 때에는 리턴 받은 객체를 이용해 close함수를 호출하고 끝낸다.

 

반응형

'개발관련 > Go언어' 카테고리의 다른 글

[Golang] MySQL 접속하기  (0) 2019.12.01
Mac에서 Go 컴파일러 설치  (0) 2018.09.03
반응형

MySql을 접속하기 위해 database/sql과 MySql 드라이버가 필요하다.
database/sql는 표준패키지이므로 MySql 드라이버를 다운 받는다.
쉘이나 커맨드창에서 go get을 통해 아래와 같이 MySql 드라이버를 다운 받은 후 Import을 해야한다.

go get github.com/go-sql-driver/mysql

 

DB에 아래와 같이 테이블과 데이터를 생성한다.

create table person
(
name varchar(32) not null,
phone varchar(13),
address varchar(200)
);

insert into person (name, address) values('홍길동', '경기도 성남시 분당구 삼평동');
insert into person (name, address) values('임꺽정', '서울시 노원구 중계동');
insert into person (name, address) values('구미호', '경기도 고양시 일산동구 백석동');
commit;

예제코드 - MultiRow

package main

import (
	"fmt"
	"os"
	"database/sql"	
	_ "github.com/go-sql-driver/mysql"
)

func main() {
	//conn, err := sql.Open("mysql", "계정명:계정패스워드@tcp(DB주소:DB포트)/데이터베이스명")
    conn, err := sql.Open("mysql", "testuser:test1234@tcp(localhost:3306)/mydb")
	if err != nil {
		fmt.Println(err)
		os.Exit(1)
	}

	rows, err := conn.Query("select name, address from person")
	if err != nil {
		fmt.Println(err)
		os.Exit(1)
	}

	//조회한 데이터를 반복문으로 데이터를 출력
	for rows.Next() {
		var name string
		var address string
		rows.Scan(&name, &phone)
		fmt.Printf("name : %s, address : %s\n", name, address)
	}

	//DB 접속 해제
	conn.Close()
}

결과

name : 홍길동, address : 경기도 성남시 분당구 삼평동
name : 임꺽정, address : 서울시 노원구 중계동
name : 구미호, address : 경기도 고양시 일산동구 백석동

 

예제코드 - SingleRow

package main

import (
	"fmt"
	"os"
	"database/sql"	
	_ "github.com/go-sql-driver/mysql"
)

func main() {
	//conn, err := sql.Open("mysql", "계정명:계정패스워드@tcp(DB주소:DB포트)/데이터베이스명")
    conn, err := sql.Open("mysql", "testuser:test1234@tcp(localhost:3306)/mydb")
	if err != nil {
		fmt.Println(err)
		os.Exit(1)
	}

	var name string
	var address string
    
    //다중 리턴이 아닌 단일 리턴인 경우 err는 위에서 변수를 생성하였으므로 := 가 아닌 = 으로 사용
	err = conn.Query("select name, address from person").Scan(&name, &phone)
	
	if err != nil {
		fmt.Println(err)
		os.Exit(1)
	}
    
    //조회한 데이터를 반복문으로 데이터를 출력
    fmt.Printf("name : %s, address : %s\n", name, address)

	//DB 접속 해제
	conn.Close()
}

결과

name : 홍길동, address : 경기도 성남시 분당구 삼평동 

 

반응형

'개발관련 > Go언어' 카테고리의 다른 글

[Golang] Mysql Insert, Update, Delete 사용하기  (0) 2019.12.08
Mac에서 Go 컴파일러 설치  (0) 2018.09.03
반응형

Mac에서 Go 컴파일러 설치 시  설치 순서는 아래와 같다.

1. 파일 다운로드

2. 파일 설치

3. Path 설정

4. 작업공간(workspace) 설정


1. 파일 다운로드 

http://golang.org접속하여 Download Go 라고 표시된 박스를 클릭한다.


파일은 tar로 묶인 파일과 pkg파일 두가지가 있다. 이중에서 PKG파일을 선택한다.

2. 파일 설치

패키지 파일을 더블클릭을 하면 아래와 같은 화면이 나온다 계속 버튼을 클릭하여 설치를 진행한다.


3. Path 설정

기본적으로 설치가 완료되면 Path가 자동 설정된다. 하지만 설정이 안되었을 경우 터미널을 열어 홈디렉토리로 이동한다.

이동한 후 터미널창에서 cmd> vi .profile 입력한다.

기존 Path설정 값 뒤에 "/Users/사용자계정/go/bin"을 추가한다. 참고로 Path값 구분자는 콜론(:)이다.

패키지를 이용하여 설정할 경우 GOROOT는 기본적으로 /usr/local/go 위치로 설정된다.

그러나 다른 디렉토리에 설치했을 경우 터미널에서 "vi .profile"을 열어 "export GOROOT=설치경로/go" 로 설정한다.


4.작업 공간(workspace) 설정

컴파일러 설치가 끝났으면 개발 코드를 저장하거나 오픈소스를 내려받기 위한 공간이 필요하다.

workspace 설정 순서는 아래와 같다.

4-1. Git 설정

4-2. 작업 Path 설정


4-1. Git 설정

Go 언어에서 코드 작성 시 필요한 도구들은 golang.org에서 제공을 하는데 해당 소스들은 git으로만 접근 가능하도록 되어 있어서 Git 설치가 필요하다.


4-2. 작업 Path 설정

작업 Path는 기본적으로 "홈디렉토리/go"로 설정한다. 이외의 디렉토리로 설정 시 golang.org에서 제공하는 도구들이 설정한 디렉토리로 저장이 되지 않고 "홈디렉토리/go" 하위로 저장이 되기 때문에 굳이 다른 디렉토리를 설정할 필요는 없을 것 같다.

"vi .profile"을 열어 "export GOPATH=/Users/계정명/go" 로 설정한다.

설정이 완료된 후 터미널에서 "go get golang.org/x/tools/cmd/..." 명령을 입력한다.

명령 입력 후 GOPATH를 설정하라는 메시지가 나오면 설정이 정상적으로 되지 않았으니 다시 확인하여 설정한다.

명령이 수행되면 "홈디렉토리/go" 디렉토리 하위에는 bin, pkg, src 디렉토리가 생성된다.

 bin

 실행 파일 모음 디렉토리

 pkg

 컴파일된 패키지 오프젝트 파일 저장 디렉토리

 src

 소스 코드 저장 디렉토리


설정이 완료되면 src 디렉토리 아래에 "vi hello.go" 명령을 입력한 후 테스트 코드를 입력한다.

- hello.go

package main

import "fmt"

func main() {

fmt.Println("Hello, World")

go를 이용하여 명령을 수행하여 "Hello, World" 문자열을 출력을 확인한다.

cmd>go run hello.go


반응형

'개발관련 > Go언어' 카테고리의 다른 글

[Golang] Mysql Insert, Update, Delete 사용하기  (0) 2019.12.08
[Golang] MySQL 접속하기  (0) 2019.12.01

+ Recent posts