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

coldplay.xixi
풀어 주다: 2020-07-02 17:42:20
앞으로
3921명이 탐색했습니다.
친절한 알림: 이 글은 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으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿