2015-05-14 79 views
5

我正在處理自動克隆數據庫的Golang腳本。 我正在使用go-sql-driver,但我無法在文檔中找到創建新數據庫的方法。 連接到MySQL需要像一個URL方案:如何使用go-sql-driver創建新的MySQL數據庫

user:[email protected](localhost:3306)/database_name 

但數據庫不存在呢,我只是想連接到服務器,然後創建一個新的。

我該怎麼做?我必須使用另一個驅動程序?

回答

19

你可以完美地使用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

+0

'database/sql'維護一個連接池。當我建立一個新的連接時,我看到「Error 1046:No database selected」彈出。在'database/sql'打開一個新的連接之後,有沒有辦法自動運行db.Exec(「USE」+ name)'? – mlangenberg

+0

是的,只要將數據庫名稱放在連接字符串中:「user:password @ tcp(hostname:port)/ dbname」 –

+1

啊,所以先不帶數據庫名稱的sql.Open(...)'運行'db.Exec(「CREATE DATABASE IF NOT EXISTS」+ name)'。然後關閉連接,使用*數據庫名稱'sql.Open(.../name)'*來創建一個數據庫並在池中安全地使用它。 – mlangenberg

1

一個很好的數據庫/ 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 
} 
+2

自從你調用'defer db.Close()'後,'return db'將會被關閉。 – Xeoncross

相關問題