반응형

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

+ Recent posts