我正在研究自动克隆数据库的Golang脚本.我正在使用go-sql-driver但我在文档中找不到创建新数据库的方法.连接到MySQL需要一个URL方案,如:
user:password@tcp(localhost:3306)/database_name
Run Code Online (Sandbox Code Playgroud)
但是数据库还不存在,我只想连接到服务器然后创建一个新服务器.
我怎样才能做到这一点?我必须使用另一个驱动程序?
Did*_*zia 26
你可以完美地使用go-sql-driver.但是,您需要使用具有适当访问权限的mysql用户来创建新数据库.
这是一个例子:
func create(name string) {
db, err := sql.Open("mysql", "admin:admin@tcp(127.0.0.1:3306)/")
if err != nil {
panic(err)
}
defer db.Close()
_,err = db.Exec("CREATE DATABASE "+name)
if err != nil {
panic(err)
}
_,err = db.Exec("USE "+name)
if err != nil {
panic(err)
}
_,err = db.Exec("CREATE TABLE example ( id integer, data varchar(32) )")
if err != nil {
panic(err)
}
}
Run Code Online (Sandbox Code Playgroud)
请注意,连接字符串中未提供数据库名称.我们只是在连接后创建数据库(CREATE DATABASE命令),并切换连接以使用它(USE命令).
注意:VividCortex人员在http://go-database-sql.org/index.html上维护了一个很好的数据库/ sql教程和文档.
如果你想在不存在的情况下创建一个新的数据库,并直接在你的程序中使用它,注意database/sql维护一个连接池。
因此打开的数据库连接,最好应该包含数据库名称。我已经看到手动使用后"Error 1046: No database selected"何时database/sql打开新连接db.Exec("USE "+name)。
func createAndOpen(name string) *sql.DB {
db, err := sql.Open("mysql", "admin:admin@tcp(127.0.0.1:3306)/")
if err != nil {
panic(err)
}
defer db.Close()
_,err = db.Exec("CREATE DATABASE IF NOT EXISTS "+name)
if err != nil {
panic(err)
}
db.Close()
db, err = sql.Open("mysql", "admin:admin@tcp(127.0.0.1:3306)/" + name)
if err != nil {
panic(err)
}
defer db.Close()
return db
}
Run Code Online (Sandbox Code Playgroud)