>백엔드 개발 >Golang >MySQL 전처리 작업을 위한 Go 언어 배우기

MySQL 전처리 작업을 위한 Go 언어 배우기

coldplay.xixi
coldplay.xixi앞으로
2020-07-02 17:42:203953검색
친절한 알림: 이 글은 6분 41초 정도 읽어야 합니다. 더 많은 조언 부탁드리며 읽어주셔서 감사합니다.

이 사이트를 구독하세요MySQL 전처리 작업을 위한 Go 언어 배우기

PreprocessingMySQL에서 클라이언트의 빈번한 요청을 방지하기 위해 사용하는 기술입니다. MySQL에서 동일한 처리 문을 미리 로드하고 작업 변수 데이터를 자리 표시자로 대체하여 MySQL에 대한 빈번한 요청을 줄입니다. 서버를 효율적으로 운영할 수 있습니다.

여기서 클라이언트는 프론트엔드와 백엔드 사이의 C/S 아키텍처가 아니라, 백그라운드 프로그램이 데이터베이스 서버를 운영하는 C/S 아키텍처입니다. 이렇게 하면 백그라운드 프로그램을 요청하는 클라이언트로 간략하게 이해할 수 있습니다. MySQL 서버 결과를 처리합니다.

관련 학습 권장 사항:

GO 언어 튜토리얼

일반적인 SQL 실행 처리 프로세스:

클라이언트에서 SQL 문을 준비합니다.

SQL 문을 MySQL 서버로 보냅니다. MySQL 서버 명령문;

서버는 실행 결과를 클라이언트에 반환합니다.
  1. 전처리 실행 과정:
  2. SQL을
  3. 구조 부분과 데이터 부분
으로 분할합니다.

SQL 문을 실행할 때 먼저 동일한 명령과 구조 부분을 MySQL 서버에 보내고 MySQL 서버가 수행하도록 합니다. 사전 처리(이번에는 SQL 문이 실제로 실행되지 않음)

SQL 문의 구조적 무결성을 보장하기 위해 처음으로 SQL 문을 보낼 때 Represented by data 자리 표시자를 사용하세요. 데이터 부분은 MySQL 서버로 전송되고 MySQL 서버는 SQL 문의 자리 표시자를 대체합니다.
  1. MySQL 서버는 전체 SQL 문을 실행하고 결과를 클라이언트에 반환합니다.
  2. 전처리의 장점
  3. 전처리된 명령문은
  4. 분석 시간을 대폭 단축
  5. , 단 하나의 쿼리만 생성됩니다(문이 여러 번 실행되지만).
매개변수 바인딩

서버 대역폭 감소, 매개변수만 전송

준비된 문장은 **SQL 주입**에 매우 유용합니다. 왜냐하면 매개변수 값이 전송된 후 다른 프로토콜이 사용되어 데이터의 적법성을 보장하기 때문입니다.
  • Go 언어 구현
  • Go 언어에서는 db.Prepare() 메서드를 사용하여 전처리를 구현합니다.
    func (db *DB) Prepare(query string) (*Stmt, error)
  • Prepare는 전처리된 SQL 문을 실행하고 Stmt 구조 포인터인 Perform을 반환합니다. 데이터 바인딩 작업.
  • 쿼리 작업은 db.Prepare() 메서드를 사용하여 전처리 SQL을 선언하고 stmt.Query()를 사용하여 쿼리, 업데이트, 삽입을 위한 자리 표시자로 데이터를 바꿉니다. 삭제 작업은 stmt.Exec()을 사용하여 수행됩니다.

전처리 쿼리 예시

// 预处理查询数据func prepareQuery() {
    sqlStr := "SELECT id,name,age FROM user WHERE id > ?"
    stmt, err := db.Prepare(sqlStr)
    if err != nil {
        fmt.Printf("prepare sql failed, err:%v\n", err)
        return
    }
    rows, err := stmt.Query(1)
    if err != nil {
        fmt.Printf("exec failed, err:%v\n", err)
        return
    }
    defer rows.Close()

    for rows.Next() {
        var u user
        err := rows.Scan(&u.id, &u.name, &u.age)
        if err != nil {
            fmt.Printf("scan data failed, err:%v\n", err)
            return
        }
        fmt.Printf("id:%d, name:%s, age:%d\n", u.id, u.name, u.age)
    }}

db.Prepare() 方法实现预处理:

// 预处理更新数据func prepareUpdate() {
    sqlStr := "UPDATE user SET age = ? WHERE id = ?"
    stmt, err := db.Prepare(sqlStr)
    if err != nil {
        fmt.Printf("prepare sql failed, err:%v\n", err)
        return
    }
    _, err = stmt.Exec(18, 2)
    if err != nil {
        fmt.Printf("exec failed, err:%v\n", err)
        return
    }
    fmt.Printf("prepare update data success")}

Prepare 执行预处理 SQL 语句,并返回 Stmt 结构体指针,进行数据绑定操作。

查询操作使用 db.Prepare() 方法声明预处理 SQL,使用 stmt.Query() 将数据替换占位符进行查询,更新、插入、删除操作使用 stmt.Exec()

전처리 업데이트 예시

// 预处理更新数据func prepareUpdate() {
    sqlStr := "UPDATE user SET age = ? WHERE id = ?"
    stmt, err := db.Prepare(sqlStr)
    if err != nil {
        fmt.Printf("prepare sql failed, err:%v\n", err)
        return
    }
    _, err = stmt.Exec(18, 2)
    if err != nil {
        fmt.Printf("exec failed, err:%v\n", err)
        return
    }
    fmt.Printf("prepare update data success")}

전처리 삽입 예시

// 预处理删除数据func prepareDelete() {
    sqlStr := "DELETE FROM user WHERE id = ?"
    stmt, err := db.Prepare(sqlStr)
    if err != nil {
        fmt.Printf("prepare sql failed, err:%v\n", err)
        return
    }
    result, err := stmt.Exec(3)
    n, err := result.RowsAffected()
    if err != nil {
        fmt.Printf("delete rows failed, err:%v\n", err)
        return
    }
    if n > 0 {
        fmt.Printf("delete data success")
    } else {
        fmt.Printf("delete data error")
    }

전처리 삭제 예시

rrreee

위 내용은 MySQL 전처리 작업을 위한 Go 언어 배우기의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 learnku.com에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제