I'm trying to find a MySql driver that i can use with Go which supports issuing multiple SQL statements in one call. For example i might wish to create a database using the following SQL:
DROP SCHEMA IF EXISTS foo;
CREATE SCHEMA IF NOT EXISTS foo;
In languages such as PHP you can just place both SQL statements in one string and execute it in one go, like this:
$db = new PDO(...);
$db->query("DROP SCHEMA IF EXISTS foo; CREATE SCHEMA IF NOT EXISTS foo;");
The reason i need this is because i have SQL dumps (from mysqldump
) i'd like to apply programmatically to various databases.
I'm looking for the same functionality in Go but it seems all the different drivers don't support it, which, frankly, is shocking to me.
Go-MySQL-Driver
https://github.com/go-sql-driver/mysql
This seems to be the most used driver for Go.
package main
import "database/sql"
import "log"
import _ "github.com/go-sql-driver/mysql"
func main() {
db, err := sql.Open("mysql", "user:password@(127.0.0.1:3306)/")
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()
}
output:
2015/02/16 18:58:08 Error 1064: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'CREATE SCHEMA IF NOT EXISTS foo' at line 1
MyMySQL
https://github.com/ziutek/mymysql
This is another popular driver.
package main
import "database/sql"
import "log"
import _ "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)
}
sql = "USE DATABASE foo;"
_, err = db.Exec(sql) // <-- error
if err != nil {
log.Println(err)
}
db.Close()
}
output:
2015/02/16 18:58:08 packet sequence error
Does anyone know of any MySql driver compatible with Go that can handle multiple statements in one string like these?