英文:
How to create a new MySQL database with go-sql-driver
问题
我正在编写一个自动克隆数据库的 Golang 脚本。
我正在使用 go-sql-driver,但是在文档中找不到创建新数据库的方法。
连接到 MySQL 需要一个类似于以下格式的 URL 方案:
user:password@tcp(localhost:3306)/database_name
但是数据库还不存在,我只想连接到服务器然后创建一个新的数据库。
我该如何做?我需要使用另一个驱动程序吗?
英文:
I'm working on Golang script that automatically clone a database.
I'm using go-sql-driver but i can't find in the documentation a way to create a new database.
Connection to MySQL require an URL scheme like:
user:password@tcp(localhost:3306)/database_name
But the database not exists yet, I just want to connect to the server and then create a new one.
How can I do that? I have to use another driver?
答案1
得分: 43
你可以完全使用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)
}
}
请注意,连接字符串中没有提供数据库名称。我们只是在连接之后创建数据库(CREATE DATABASE命令),然后切换连接以使用它(USE命令)。
注意:VividCortex团队在http://go-database-sql.org/index.html上维护了一个很好的database/sql教程和文档。
英文:
You can perfectly use the go-sql-driver. However, you need to use a mysql user which has the proper access rights to create new databases.
Here is an example:
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)
}
}
Note that the database name is not provided in the connection string. We just create the database after the connection (CREATE DATABASE command), and switch the connection to use it (USE command).
Note: the VividCortex guys maintain a nice database/sql tutorial and documentation at http://go-database-sql.org/index.html
答案2
得分: 8
如果您想在程序中创建一个新的数据库(如果不存在),并直接使用它,请注意database/sql
维护一个连接池。
因此,打开的数据库连接最好包含数据库名称。我曾经在手动使用db.Exec("USE "+name)
后,database/sql
打开新连接时遇到过"Error 1046: No database selected"
的错误。
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
}
希望对您有所帮助!
英文:
If you want to create a new database if it does not exist, and use it directly in your program, be aware that database/sql
maintains a connection pool.
Therefore the opened database connection, should preferably contain the database name. I've seen "Error 1046: No database selected"
when database/sql
opens a new connection after using db.Exec("USE "+name)
manually.
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
}
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论