Tôi đang cố gắng tìm trình điều khiển MySql mà tôi có thể sử dụng với Go hỗ trợ phát hành nhiều câu lệnh SQL trong một cuộc gọi. Ví dụ tôi có thể muốn tạo một cơ sở dữ liệu bằng cách sử dụng SQL sau:Trình điều khiển Go Mysql có tồn tại hỗ trợ nhiều câu lệnh trong một chuỗi không?
DROP SCHEMA IF EXISTS foo;
CREATE SCHEMA IF NOT EXISTS foo;
Trong các ngôn ngữ như PHP bạn chỉ có thể đặt cả hai câu lệnh SQL trong một chuỗi và thực hiện nó trong một đi, như thế này:
$db = new PDO(...);
$db->query("DROP SCHEMA IF EXISTS foo; CREATE SCHEMA IF NOT EXISTS foo;");
Lý do tôi cần điều này là vì tôi có các bãi chứa SQL (từ mysqldump
) tôi muốn áp dụng lập trình cho các cơ sở dữ liệu khác nhau.
Tôi đang tìm các chức năng tương tự trong Go nhưng có vẻ như tất cả các trình điều khiển khác nhau không hỗ trợ nó, mà, thẳng thắn, gây sốc cho tôi.
Go-MySQL-Driver
https://github.com/go-sql-driver/mysql
này có vẻ là người lái xe sử dụng nhiều nhất cho Go.
package main
import "database/sql"
import "log"
import _ "github.com/go-sql-driver/mysql"
func main() {
db, err := sql.Open("mysql", "user:[email protected](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()
}
đầu ra:
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
Đây là một tài xế phổ biến.
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()
}
đầu ra:
2015/02/16 18:58:08 packet sequence error
Có ai biết về bất kỳ trình điều khiển tương thích với MySql Go có thể xử lý nhiều lệnh trong một chuỗi như thế này?
Đi Trình điều khiển MySQL hiện có hỗ trợ đa câu lệnh: https://github.com/go-sql-driver/mysql/pull/411 –