Go 語言操作 MySQL 之 預處理

2021-10-07 17:11:59 字數 1785 閱讀 8199

預處理是 mysql 為了防止客戶端頻繁請求的一種技術,是對相同處理語句進行預先載入在 mysql 中,將操作變數資料用佔位符來代替,減少對 mysql 的頻繁請求,使得伺服器高效執行。

在這裡客戶端並不是前台後台之間的 c/s 架構,而是後台程式對資料庫伺服器進行操作的 c/s 架構,這樣就可以簡要地理解了後台程式作為 client 向 mysql server 請求並處理結果了。

普通 sql 執行處理過程:

在客戶端準備 sql 語句;

傳送 sql 語句到 mysql 伺服器;

在 mysql 伺服器執行該 sql 語句;

伺服器將執行結果返回給客戶端。

預處理執行處理過程:

將 sql 拆分為結構部分與資料部分

在執行 sql 語句的時候,首先將前面相同的命令和結構部分傳送給 mysql 伺服器,讓 mysql 伺服器事先進行一次預處理(此時並沒有真正的執行 sql 語句);

為了保證 sql 語句的結構完整性,在第一次傳送 sql 語句的時候將其中可變的資料部分都用乙個資料佔位符來表示;

然後把資料部分傳送給 mysql 服務端,mysql 服務端對 sql 語句進行佔位符替換;

mysql 服務端執行完整的 sql 語句並將結果返回給客戶端。

在 go 語言中,使用db.prepare()方法實現預處理:

func (db *db) prepare(query string) (*stmt, error)
prepare 執行預處理 sql 語句,並返回 stmt 結構體指標,進行資料繫結操作。

查詢操作使用db.prepare()方法宣告預處理 sql,使用stmt.query()將資料替換佔位符進行查詢,更新、插入、刪除操作使用stmt.exec()來操作。

// 預處理查詢資料

func preparequery()

rows, err := stmt.query(1)

if err != nil

defer rows.close()

for rows.next()

fmt.printf("id:%d, name:%s, age:%d\n", u.id, u.name, u.age)

}}

// 預處理更新資料

func prepareupdate()

_, err = stmt.exec(18, 2)

if err != nil

fmt.printf("prepare update data success")

}

// 預處理更新資料

func prepareupdate()

_, err = stmt.exec(18, 2)

if err != nil

fmt.printf("prepare update data success")

}

// 預處理刪除資料

func preparedelete()

result, err := stmt.exec(3)

n, err := result.rowsaffected()

if err != nil

if n > 0 else

}

Go 語言操作 MySQL 之 CURD 操作

mysql 是目前開發中最常見的關係型資料庫,使用 go 語言進行操控資料庫需要使用 go 自帶database sql和驅動go sql driver mysql來實現,建立好 go 專案,需要引用驅動依賴 go get u github.com go sql driver mysql使用 mys...

MYSQL預處理 C語言

include include include include pragma comment lib,libmysql pragma comment lib,wsock32 int main int argc,char argv 建立mysql stmt控制代碼 mysql stmt stmt my...

Go語言操作MySQL

go語言安裝mysql資料庫驅動步驟 安裝驅動 go get github.com go sql driver mysql檢測安裝是否成功 sudo find name go sql driver 進入mysql目錄。ls l wc l一共32個檔案 匯入mysql資料庫驅動import 測試連線資...