データベースを自動的に複製するGolangスクリプトに取り組んでいます。 go-sql-driverを使用していますが、ドキュメントで新しいデータベースを作成する方法が見つかりません。 MySQLへの接続には、次のようなURLスキームが必要です。
user:password@tcp(localhost:3306)/database_name
しかし、データベースはまだ存在していません。サーバーに接続して、新しいデータベースを作成したいだけです。
どうやってやるの?別のドライバーを使用する必要がありますか?
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チュートリアルとドキュメントを維持しています。
新しいデータベースが存在しない場合に作成し、それをプログラムで直接使用する場合は、_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
}
_