預處理預處理是MySQL 為了防止客戶端頻繁要求的技術,是對相同處理語句進行預先載入在MySQL 中,將操作變數資料以佔位符來代替,減少對MySQL 的頻繁請求,使得伺服器高效運作。
在這裡客戶端並不是前台後台之間的C/S 架構,而是後台程式對資料庫伺服器進行操作的C/S 架構,這樣就可以簡要地理解了後台程式作為Client 向MySQL Server 請求並處理了結果。#普通SQL 執行處理過程:#在客戶端準備SQL 語句;
發送SQL 語句到MySQL 伺服器;在MySQL 伺服器執行該SQL 語句;
; 在執行SQL 語句的時候,先將前面相同的指令和結構部分傳送給MySQL 伺服器,讓MySQL 伺服器事先進行一次預處理(此時並沒有真正的執行SQL 語句);
func (db *DB) Prepare(query string) (*Stmt, error)Prepare 執行預處理SQL 語句,並傳回Stmt 結構體指針,進行資料綁定操作。
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) }}
預處理更新範例// 预处理更新数据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 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") }
以上是學習Go 語言操作 MySQL 之 預處理的詳細內容。更多資訊請關注PHP中文網其他相關文章!