web-dev-qa-db-ja.com

go-sql-driverを使用して新しいMySQLデータベースを作成する方法

データベースを自動的に複製するGolangスクリプトに取り組んでいます。 go-sql-driverを使用していますが、ドキュメントで新しいデータベースを作成する方法が見つかりません。 MySQLへの接続には、次のようなURLスキームが必要です。

user:password@tcp(localhost:3306)/database_name

しかし、データベースはまだ存在していません。サーバーに接続して、新しいデータベースを作成したいだけです。

どうやってやるの?別のドライバーを使用する必要がありますか?

13
gdg

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 で、Niceデータベース/ SQLチュートリアルとドキュメントを維持しています。

26
Didier Spezia

新しいデータベースが存在しない場合に作成し、それをプログラムで直接使用する場合は、_database/sql_が接続プールを維持することに注意してください。

したがって、開かれたデータベース接続には、データベース名が含まれている必要があります。 _"Error 1046: No database selected"_がdb.Exec("USE "+name)を手動で使用した後に新しい接続を開いたとき、私は_database/sql_を見てきました。

_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
}
_
3
mlangenberg