-
[Golang] Mysql 연결하기개발언어/Go 2020. 10. 25. 20:00
1.DB 연결
Import "Github.com/go-sql-driver/mysql" // mysql 전용 라이브러리 import ... // 디비 커넥션 오픈 // 참고) func Open(driverName, dataSourceName string) (*DB, error) // 아래는 예시 db, err := sql.Open("mysql", fmt.Sprintf("%s:%s@/dbname?parseTime=true", os.Getenv("MYSQLUSERNAME"), os.Getenv("MYSQLPASSWORD"))) ... (sql 작업) defer db.Close() // db 커넥션을 다 사용하면 닫아준다.
2. 테이블 생성 및 조작 (DDL, DML)
// DDL, DML은 db.Exec 명령어를 통해 작업한다. // 참고) func (db *DB) Exec(query string, args ...interface{}) (Result, error) // 아래는 Exec 예시 if _, err := db.Exec("CREATE TABLE example (name VARCHAR(20), created DATETIME)"); err != nil { return err } if _, err := db.Exec(`INSERT INTO example (name, created) values ("Aron", NOW())`); err != nil { return err } // 다만, 조회에 대한 쿼리는 Query 함수를 사용한다. // 참고) func (db *DB) Query(query string, args ...interface{}) (*Rows, error) // 아래는 Query 예시 rows, err := db.Query("SELECT name, created FROM example where name=?", name) // 결과값 변수에 할당 // func (rs *Rows) Scan(dest ...interface{}) error // 아래는 사용 예시 if err := rows.Scan(&e.Name, &e.CREATED); err != nil { return err } defer db.Exec("DROP TABLE example")
3. 트랜젝션
// 트랜젝션 시작 // 참고) func (db *DB) Begin() (*Tx, error) // 아래는 예시 tx, err := db.Begin() // Rollback // 참고) func (tx *Tx) Rollback() error // 아래는 예시 defer tx.Rollback() // Commit // 참고) func (tx *Tx) Commit() error // 아래는 예시 tx.Commit()
4. SQL의 커넥션 풀, 속도 제한 및 시간초과
// 커넥션 수 제한 // 참고) func (db *DB) SetMaxOpenConns(n int) // 아래는 예시 db.SetMaxOpenConns(24) // 열려있는 연결을 24개로 제한 // 최대 Idle 커넥션 제한 // func (db *DB) SetMaxIdleConns(n int) // 아래는 예시 db.SetMaxIdelConns(24)
'개발언어 > Go' 카테고리의 다른 글
[Golang] 마이크로서비스 공통패턴 (0) 2020.10.14 [Golang] RPC API (0) 2020.10.12 [Golang] go에서 RPC 다루기 (0) 2020.10.11 [Golang] net/http 패키지 (0) 2020.09.30 [golang] 마샬링(Marshaling) (0) 2020.09.26