[TOC]
## 語言使用數據庫的一般步驟
> [sqlx官網](https://github.com/jmoiron/sqlx)
### 引入xxx
1. 第三方包 `import "github.com/jmoiron/sqlx"`
2. 官方驅動 `import _ "github.com/go-sql-driver/mysql"`
### 建立鏈接
```
//uid:pass@tcp(host:port)/dbname?charset=utf8&parseTime=true
//用戶名:密碼@tcp(主機:端口)/數據庫名稱?charset=utf8&parseTime=true
db, err = sqlx.Open(`mysql`, `root:root@tcp(127.0.0.1:3306)/news?charset=utf8&parseTime=true`)
```
### 測試鏈接
```
err = db.Ping()
```
### 查詢數據

#### 單個查詢
```
mod := &Class{}
//查詢一條數據
//錯誤信息 = db.Get(要保存數據的變量的指針,`sql語句`,參數...)
err = db.Get(mod, `select * from class limit 1`)
fmt.Println(mod, err)
```
#### 查詢集合
```
mods := make([]Class, 0)
//查詢多條數據
//錯誤信息 = db.Select(要保存數據的變量的指針,`sql語句`,參數...)
err = db.Select(&mods, `select * from class`)
fmt.Println(&mods, err)
```
### 操作數據
#### 添加數據
```
//操作結果, 錯誤信息 := db.Exec(`sql語句`,參數...)
//result, err := db.Exec("insert into class(`name`,`desc`) values(?,?)", `名稱`, `描述description`)
result, err := db.Exec("insert into class(`name`,`desc`) values(?,?)", `名稱`, `描述description`)
fmt.Println(err)
// 如果是insert數據 則LastInsertId 返回插入的 id
fmt.Println(result.LastInsertId())
// 修改和刪除 RowsAffected 返回到底影響了多少條數據
fmt.Println(result.RowsAffected())
```


#### 修改數據
```
//修改數據
result, err := db.Exec("update class set `desc`= ?", `描述 描述`)//警告
fmt.Println(err)
// 如果是insert數據 則LastInsertId 返回插入的 id
fmt.Println(result.LastInsertId())
// 修改和刪除 RowsAffected 返回到底影響了多少條數據
fmt.Println(result.RowsAffected())
```

#### 刪除數據
```
//刪除數據
result, err := db.Exec("delete from class where id = ?", 4) //警告
fmt.Println(err)
// 如果是insert數據 則LastInsertId 返回插入的 id
fmt.Println(result.LastInsertId())
// 修改和刪除 RowsAffected 返回到底影響了多少條數據
fmt.Println(result.RowsAffected())
```