반응형

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

+ Recent posts