ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [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
Designed by Tistory.