如何使用go-sql-driver创建一个新的MySQL数据库

gdg*_*gdg 11 mysql go

我正在研究自动克隆数据库的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教程和文档.

  • 老实说:这不是一个教科书式的例子,教你如何为 sql 注入敞开心扉?有没有办法使用占位符参数来完成这项工作? (3认同)
  • `database / sql`维护一个连接池。建立新连接后,我弹出“错误1046:未选择数据库”。在`database / sql`打开一个新连接之后,有没有一种方法可以自动运行`db.Exec(“ USE” + name)`? (2认同)

mla*_*erg 7

如果你想在不存在的情况下创建一个新的数据库,并直接在你的程序中使用它,注意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)

  • 因为你调用了`defer db.Close()`,`return db` 将被关闭。 (6认同)