使用Go MySQL 驅動程式執行多個語句
在Go 中,在單一字串中執行多個SQL 語句可能具有挑戰性。本文檢查了 Go 可用的 MySQL 驅動程式並調查了它們對此功能的支援。
Go-MySQL-Driver
Go 最受歡迎的 MySQL 驅動程式是 go-sql -驅動程式/mysql。但是,其預設配置不支援單一字串中的多個語句。這在問題中提供的範例程式碼中很明顯,其中兩個驅動程式在嘗試執行多個語句時都會產生錯誤。
設定自訂
幸運的是,go-sql- driver/mysql 允許自訂連線參數。透過將 multiStatements 參數設為 true,可以將驅動程式配置為接受單一字串中的多個語句。
package main import ( "database/sql" "log" _ "github.com/go-sql-driver/mysql" ) func main() { db, err := sql.Open("mysql", "user:password@(127.0.0.1:3306)/?multiStatements=true") if err != nil { log.Println(err) } sql := "DROP SCHEMA IF EXISTS foo; CREATE SCHEMA IF NOT EXISTS foo;" _, err = db.Exec(sql) if err != nil { log.Println(err) } db.Close() }
透過此修改,程式碼現在將成功執行兩個 SQL 語句,不會發生錯誤。
替代驅動程式
另一個選擇是使用 github.com/ziutek/mymysql驅動程序,不需要特殊配置來執行多個語句。
package main import ( "database/sql" "log" _ "github.com/ziutek/mymysql/godrv" ) func main() { db, err := sql.Open("mymysql", "database/user/password") if err != nil { log.Println(err) } sql := "DROP SCHEMA IF EXISTS foo; CREATE SCHEMA IF NOT EXISTS foo;" _, err = db.Exec(sql) if err != nil { log.Println(err) } db.Close() }
雖然此驅動程式確實支援多個語句,但需要注意的是,它可能不像其他選項那樣廣泛使用或積極維護。
注意事項
MySQL 文件警告不要在單一字串中執行多個語句,因為它可以引入細微的錯誤並影響效能。通常建議使用預存程序或準備好的語句。儘管如此,在單一字串中執行多個語句的能力在某些情況下可能是有益的,例如從 SQL 轉儲恢復資料庫。
以上是如何使用 Go 的 MySQL 驅動程式在單一字串中執行多個 SQL 語句?的詳細內容。更多資訊請關注PHP中文網其他相關文章!