Go搭配mysql GO 使用MySQL資料庫

2021-10-17 12:12:14 字數 3050 閱讀 9449

目前internet上流行的**構架方式是lamp,其中的m即mysql, 作為資料庫,mysql以免費、開源、使用方便為優勢成為了很多web開發的後端資料庫儲存引擎。

mysql驅動

go中支援mysql的驅動目前比較多,有如下幾種,有些是支援database/sql標準,而有些是採用了自己的實現介面,常用的有如下幾種:

這個驅動比較新,維護的比較好

完全支援database/sql介面

支援keepalive,保持長連線,雖然星星fork的mymysql也支援keepalive,但不是執行緒安全的,這個從底層就支援了keepalive。

示例**

接下來的幾個小節裡面我們都將採用同乙個資料庫表結構:資料庫test,使用者表userinfo,關聯使用者資訊表userdetail。

create table `userinfo` (

`uid` int(10) not null auto_increment,

`username` varchar(64) null default null,

`departname` varchar(64) null default null,

`created` date null default null,

primary key (`uid`)

create table `userdetail` (

`uid` int(10) not null default '0',

`intro` text null,

`profile` text null,

primary key (`uid`)

如下示例將示範如何使用database/sql介面對資料庫表進行增刪改查操作

//插入資料

stmt, err := db.prepare("insert userinfo set username=?,departname=?,created=?")

checkerr(err)

res, err := stmt.exec("astaxie", "研發部門", "2012-12-09")

checkerr(err)

id, err := res.lastinsertid()

checkerr(err)

fmt.println(id)

//更新資料

stmt, err = db.prepare("update userinfo set username=? where uid=?")

checkerr(err)

res, err = stmt.exec("astaxieupdate", id)

checkerr(err)

affect, err := res.rowsaffected()

checkerr(err)

fmt.println(affect)

//查詢資料

rows, err := db.query("select * from userinfo")

checkerr(err)

for rows.next() {

var uid int

var username string

var department string

var created string

err = rows.scan(&uid, &username, &department, &created)

checkerr(err)

fmt.println(uid)

fmt.println(username)

fmt.println(department)

fmt.println(created)

//刪除資料

stmt, err = db.prepare("delete from userinfo where uid=?")

checkerr(err)

res, err = stmt.exec(id)

checkerr(err)

affect, err = res.rowsaffected()

checkerr(err)

fmt.println(affect)

db.close()

func checkerr(err error) {

if err != nil {

panic(err)

通過上面的**我們可以看出,go操作mysql資料庫是很方便的。

關鍵的幾個函式我解釋一下:

sql.open()函式用來開啟乙個註冊過的資料庫驅動,go-mysql-driver中註冊了mysql這個資料庫驅動,第二個引數是dns(data source name),它是go-mysql-driver定義的一些資料庫鏈結和配置資訊。它支援如下格式:

user@unix(/path/to/socket)/dbname?charset=utf8

user:password@tcp(localhost:5555)/dbname?charset=utf8

user:password@/dbname

user:password@tcp([de:ad:be:ef::ca:fe]:80)/dbname

db.prepare()函式用來返回準備要執行的sql操作,然後返回準備完畢的執行狀態。

db.query()函式用來直接執行sql返回rows結果。

stmt.exec()函式用來執行stmt準備好的sql語句

我們可以看到我們傳入的引數都是=?對應的資料,這樣做的方式可以一定程度上防止sql注入。

go連線mysql GO連線MySQL

go語言沒有提供官方的資料庫驅動,所以要安裝第三方函式庫。多行查詢 多行查詢db.query 執行一次查詢,返回多行結果 即rows 一般用於執行select命令。引數args表示query中的佔位引數。具體示例 查詢多條資料示例 func querymultirowdemo fmt.printf ...

go語言mysql驅動 MySQL Go驅動

建立資料庫 編寫test.sql source test.sql 檔案 編寫go檔案 test.go 內容如下 db,err sql.open mysql root root test 開啟資料庫test checkerr err stm,err db.prepare drop table if e...

asp登入註冊mysql 讓ASP搭配MYSQL

讓asp搭配mysql 讓asp搭配mysql 所需要工具 mysql 4.1.11 win32 myodbc 3.51.11 1 dll myodbc 3.51.11 1 win mysqlcc 0.9.4 win32 註冊檔案mydbc.reg regedit4 hkey local machi...