[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() ``` ### 查询数据 ![](https://box.kancloud.cn/1b4984ab6b7fbc1090c647d5c8093f51_805x70.png) #### 单个查询 ``` 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()) ``` ![](https://box.kancloud.cn/abe6e535cbdaf81a64fbddcefdedbcf1_773x130.png) ![](https://box.kancloud.cn/ccc66954c08232fed427276742d1f2dc_450x149.png) #### 修改数据 ``` //修改数据 result, err := db.Exec("update class set `desc`= ?", `描述 描述`)//警告 fmt.Println(err) // 如果是insert数据 则LastInsertId 返回插入的 id fmt.Println(result.LastInsertId()) // 修改和删除 RowsAffected 返回到底影响了多少条数据 fmt.Println(result.RowsAffected()) ``` ![](https://box.kancloud.cn/3ba1caa649a89625687a7faa4b75283e_395x153.png) #### 删除数据 ``` //删除数据 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()) ```