公众号图片素材网站_微信公众号教程_如何运营微信公众号_微信公众号小游戏_微信公众号h5制作
当前位置:建站首页 > 新闻资讯 > 常见问题 >

golang联接mysql数据信息库完成删改改查

发表日期:2021-04-03 21:38文章编辑:jianzhan浏览次数: 标签:    

golang联接mysql数据信息库完成删改改查 公布:smiling 来源于: PHP粉絲网 加上 访问: 评价:0

下边看一篇有关golang联接mysql数据信息库完成删改改查数据信息的事例,期待文中章能协助来到解golang与mysql数据信息库中间关联了.

golang自身沒有出示联接mysql的驱动器,可是界定了规范插口供第三方开发设计驱动器,这儿联接mysql可使用第三方库,第三方库强烈推荐应用Go-SQL-Driver/MySQL这一驱动器,升级维护保养都较为好,下边演试下实际的应用,详细编码实例能够参照最终.

免费下载驱动器:sudo go /go-sql-driver/mysql

假如提醒那样的不成功信息内容:cannot download, $GOPATH not set. For more details see: go help gopath,可使用以下指令处理.

sudo env GOPATH=/Users/chenjiebin/golang go /go-sql-driver/mysql

GOPATH的值依据自主自然环境开展更换.

建立检测表,在mysql test库文件建立检测表,编码以下:


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 =  客户表  

数据信息库联接,数据信息库联接应用datebase/sql Open涵数开展联接,编码以下:

db,err := sql.Open( mysql , user::5555)/dbname?charset=utf8 )

在其中联接主要参数能够有以下几类方式:


(/path/to/socket)/dbname?charset=utf8  user::5555)/dbname?charset=utf8  user/dbname  user:([de:ad:be:ef::ca:fe]:80)/dbname 
stmt, err := db.Prepare(`INSERT user (user_name,user_age,user_sex) values (?,?,?)`)  checkErr(err)  res, err := stmt.Exec( tony , 20, 1)  checkErr(err)  id, err := res.LastInsertId()  checkErr(err)  fmt.Println(id) 
rows, err := db.Query( SELECT * FROM user )  checkErr(err)    for rows.Next() {   var userId int   var userName string   var userAge int   var userSex int   rows.Columns()   err = rows.Scan( userId,  userName,  userAge,  userSex)   checkErr(err)   fmt.Println(userId)   fmt.Println(userName)   fmt.Println(userAge)   fmt.Println(userSex)  } 

这儿查寻的方法应用申明4个单独自变量userId、userName、userAge、userSex来储存查寻出去的每一行的值,在具体开发设计中通快递常会封裝数据信息库的实际操作,对那样的查寻一般会考虑到回到字典种类,编码以下:


//结构scanArgs、values2个数字能量数组,scanArgs的每一个值偏向values相对值的详细地址  columns, _ := rows.Columns()  scanArgs := make([]interface{}, len(columns))  values := make([]interface{}, len(columns))  for i := range values {   scanArgs[i] =  values[i]  }    for rows.Next() {   //将行数据信息储存到record字典   err = rows.Scan(scanArgs...)   record := make(map[string]string)   for i, col := range values {   if col != nil {   record[columns[i]] = string(col.([]byte))   }   }   fmt.Println(record)  } 
stmt, err := db.Prepare(`UPDATE user SET user_age=?,user_sex=? WHERE user_id=?`)  checkErr(err)  res, err := stmt.Exec(21, 2, 1)  checkErr(err)  num, err := res.RowsAffected()  checkErr(err)  fmt.Println(num) 
stmt, err := db.Prepare(`DELETE FROM user WHERE user_id=?`)  checkErr(err)  res, err := stmt.Exec(1)  checkErr(err)  num, err := res.RowsAffected()  checkErr(err)  fmt.Println(num) 

改动和删掉实际操作都较为简易,同插进数据信息相近,仅仅应用RowsAffected来获得危害的数据信息行数,详细编码以下:


func insert() {   db, err := sql.Open( mysql ,  root:@/test?charset=utf8 )   checkErr(err)     stmt, err := db.Prepare(`INSERT user (user_name,user_age,user_sex) values (?,?,?)`)   checkErr(err)   res, err := stmt.Exec( tony , 20, 1)   checkErr(err)   id, err := res.LastInsertId()   checkErr(err)   fmt.Println(id)  }    //查寻demo  func query() {   db, err := sql.Open( mysql ,  root:@/test?charset=utf8 )   checkErr(err)     rows, err := db.Query( SELECT * FROM user )   checkErr(err)     //一般demo   //for rows.Next() {   // var userId int   // var userName string   // var userAge int   // var userSex int     // rows.Columns()   // err = rows.Scan( userId,  userName,  userAge,  userSex)   // checkErr(err)     // fmt.Println(userId)   // fmt.Println(userName)   // fmt.Println(userAge)   // fmt.Println(userSex)   //}     //字典种类   //结构scanArgs、values2个数字能量数组,scanArgs的每一个值偏向values相对值的详细地址   columns, _ := rows.Columns()   scanArgs := make([]interface{}, len(columns))   values := make([]interface{}, len(columns))   for i := range values {   scanArgs[i] =  values[i]   }     for rows.Next() {   //将行数据信息储存到record字典   err = rows.Scan(scanArgs...)   record := make(map[string]string)   for i, col := range values {   if col != nil {   record[columns[i]] = string(col.([]byte))   }   }   fmt.Println(record)   }  }    //升级数据信息  func update() {   db, err := sql.Open( mysql ,  root:@/test?charset=utf8 )   checkErr(err)     stmt, err := db.Prepare(`UPDATE user SET user_age=?,user_sex=? WHERE user_id=?`)   checkErr(err)   res, err := stmt.Exec(21, 2, 1)   checkErr(err)   num, err := res.RowsAffected()   checkErr(err)   fmt.Println(num)  }    //删掉数据信息  func remove() {   db, err := sql.Open( mysql ,  root:@/test?charset=utf8 )   checkErr(err)     stmt, err := db.Prepare(`DELETE FROM user WHERE user_id=?`)   checkErr(err) //   res, err := stmt.Exec(1)   checkErr(err)   num, err := res.RowsAffected()   checkErr(err)   fmt.Println(num)  }    func checkErr(err error) {   if err != nil {   panic(err)   }  } 

总结:总体上去说都较为简易,便是查寻那里应用字典来储存回到数据信息较为繁杂一些,即然说到数据信息库联接,一般运用上都会应用联接池来降低联接花销,有关联接池下一次梳理一下再放上去.


php实例教程网——出示php实例教程免费下载資源  Powered by php粉絲网 2010-2015  网站协作
相关新闻

MySQL 浅专业知识共享

Mysql是最时兴的关联型数据信息库管理方法系统软件,在WEB运用层面MySQL是最好的RDBMS(Relati...

日期:2021-03-26 浏览次数:132

笑铺日记构建直播间卖货新方式 零间距联接商家

自年前疫情暴发以来,直播间带货刚开始慢慢变成电子商务发展趋势的必定发展趋势,因为实体线...

日期:2021-01-19 浏览次数:112