使用 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中文网其他相关文章!