在golang中操作mysql数据库(1)实现增删改操作

JimPang · · 4416 次点击 · · 开始浏览    
这是一个创建于 的文章,其中的信息可能已经有所发展或是发生改变。

**Golang操作mysql简介** Golang操作mysql数据库的感觉有点想php中的pdo对mysql操作,假设你原本是phper转型到golang中的接受起来很亲切,总体的感觉非常简单 **Golang操作mysql的注意点** `golang实现了对mysql操作的标准库然而却没有实现mysql的驱动` 因此我们需要先从github中下载go-sql-driver这个驱动包(建议在src目录下执行),使用命令如下所示: ```go go get github.com/go-sql-driver/mysql ``` **在test数据库中建立表字段如下所示** ```go CREATE TABLE IF NOT EXISTS `test`.`user` ( `user_id` INT(11) UNSIGNED NOT NULL AUTO_INCREMENT COMMENT '用户编号', `user_name` VARCHAR(45) NOT NULL COMMENT '用户名称', `user_age` TINYINT(3) UNSIGNED NOT NULL DEFAULT 0 COMMENT '用户年龄', `user_sex` TINYINT(3) UNSIGNED NOT NULL DEFAULT 0 COMMENT '用户性别', PRIMARY KEY (`user_id`)) ENGINE = InnoDB AUTO_INCREMENT = 1 DEFAULT CHARACTER SET = utf8 COLLATE = utf8_general_ci COMMENT = '用户表' ``` **实现对数据的增(insert)操作** ```go package main import ( "fmt" "database/sql" //导入mysql的驱动 _ "github.com/go-sql-driver/mysql" ) func main(){ //使用database/sql包中的Open连接数据库 db,err := sql.Open("mysql","root:root@tcp(localhost:3306)/test?charset=utf8") if err != nil { fmt.Println("连接数据库失败:",err) return } //使用DB结构体实例方法Prepare预处理插入,Prepare会返回一个stmt对象 stmt,err := db.Prepare("insert into `user`(user_name,user_age,user_sex)values(?,?,?)") if err!=nil{ fmt.Println("预处理失败:",err) return } //使用Stmt对象执行预处理参数 result,err := stmt.Exec("pengjin",33,"男") if err!=nil{ fmt.Println("执行预处理失败:",err) return }else{ rows,_ := result.RowsAffected() fmt.Println("执行成功,影响行数",rows,"行" ) } } ``` `如上代码有一种操作php中pdo的感觉`,如上代码实际上也可以不编写Prepare方法直接通过Exec方法直接实现操作,相当于一种简写方式,我们可以尝试使用这种方法直接实现删除操作 **实现对数据的删(delete)操作** ```go package main import ( "fmt" "database/sql" //导入mysql的驱动 _ "github.com/go-sql-driver/mysql" ) func main(){ //使用database/sql包中的Open连接数据库 db,err := sql.Open("mysql","root:root@tcp(localhost:3306)/test?charset=utf8") if err != nil { fmt.Println("连接数据库失败:",err) return } //直接调用db实例中的Exec方法实现预处理 result,err := db.Exec("delete from `user` where user_id=?",1) if err!=nil{ fmt.Println("预处理失败:",err) return } if err!=nil{ fmt.Println("执行预处理失败:",err) return }else{ rows,_ := result.RowsAffected() fmt.Println("执行成功,影响行数",rows,"行" ) } } ``` **实现对数据库的update操作** ```go package main import ( "fmt" "database/sql" //导入mysql的驱动 _ "github.com/go-sql-driver/mysql" ) func main(){ //使用database/sql包中的Open连接数据库 db,err := sql.Open("mysql","root:root@tcp(localhost:3306)/test?charset=utf8") if err != nil { fmt.Println("连接数据库失败:",err) return } //直接调用db实例中的Exec方法实现预处理 result,err := db.Exec("update `user` set user_age=?,user_name=? where user_id=?", 34,"zhangsan",2) if err!=nil{ fmt.Println("预处理失败:",err) return } if err!=nil{ fmt.Println("执行预处理失败:",err) return }else{ rows,_ := result.RowsAffected() fmt.Println("执行成功,影响行数",rows,"行" ) } } ```

有疑问加站长微信联系(非本文作者))

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

4416 次点击  
加入收藏 微博
被以下专栏收入,发现更多相似内容
暂无回复
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传