我正在处理自动克隆数据库的Golang脚本。 我正在使用go-sql-driver,但我无法在文档中找到创建新数据库的方法。 连接到MySQL需要像一个URL方案:如何使用go-sql-driver创建新的MySQL数据库
user:[email protected](localhost:3306)/database_name
但数据库不存在呢,我只是想连接到服务器,然后创建一个新的。
我该怎么做?我必须使用另一个驱动程序?
我正在处理自动克隆数据库的Golang脚本。 我正在使用go-sql-driver,但我无法在文档中找到创建新数据库的方法。 连接到MySQL需要像一个URL方案:如何使用go-sql-driver创建新的MySQL数据库
user:[email protected](localhost:3306)/database_name
但数据库不存在呢,我只是想连接到服务器,然后创建一个新的。
我该怎么做?我必须使用另一个驱动程序?
你可以完美地使用go-sql-driver。但是,您需要使用具有适当访问权限的mysql用户来创建新的数据库。
下面是一个例子:
func create(name string) {
db, err := sql.Open("mysql", "admin:[email protected](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)
}
}
注意,数据库名是不是在连接字符串中提供。我们只是在连接后创建数据库(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:[email protected](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:[email protected](127.0.0.1:3306)/" + name)
if err != nil {
panic(err)
}
defer db.Close()
return db
}
自从你调用'defer db.Close()'后,'return db'将会被关闭。 – Xeoncross
'database/sql'维护一个连接池。当我建立一个新的连接时,我看到“Error 1046:No database selected”弹出。在'database/sql'打开一个新的连接之后,有没有办法自动运行db.Exec(“USE”+ name)'? – mlangenberg
是的,只要将数据库名称放在连接字符串中:“user:password @ tcp(hostname:port)/ dbname” –
啊,所以先不带数据库名称的sql.Open(...)'运行'db.Exec(“CREATE DATABASE IF NOT EXISTS”+ name)'。然后关闭连接,使用*数据库名称'sql.Open(.../name)'*来创建一个数据库并在池中安全地使用它。 – mlangenberg