반응형
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 |