我正在處理自動克隆數據庫的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