Golang原生sql操作Mysql数据库增删改查

Golang要操作mysql数据库,首先需要在当期系统配置GOPATH,因为需要使用go get命令把驱动包下载到GOPATH下使用。

首先配置好你的GOPATH,执行以下命令,下载安装mysql驱动,下载完成之后会在GOPATH下的src/github.com目录下

go get -u github.com/go-sql-driver/mysql

然后本地的mysql服务要启动,并创建一个表作为测试

DROP TABLE IF EXISTS `student`;
CREATE TABLE `student` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(50) CHARACTER SET latin1 NOT NULL DEFAULT '',
  `age` tinyint(4) DEFAULT '0',
  PRIMARY KEY (`id`)
) ENGINE=MyISAM AUTO_INCREMENT=4 DEFAULT CHARSET=utf8;

连接mysql数据库命令

//mysql数据库,用户名:密码@tcp连接:端口3306/test库?字符集utf8
db, err := sql.Open("mysql", "root:root@tcp(127.0.0.1:3306)/test?charset=utf8") //返回连接字符,和err

增删改查代码(导入mysql驱动包,并使用datebase/sql Open函数进行连接)

package main

import (
    "database/sql" // 这是一个抽象层包,比如区分mysql、orcal等数据库,只有这个包是连接不上mysql的,还需要搭配下面的mysql包
       "fmt"
    _ "github.com/go-sql-driver/mysql" //导入mysql驱动包
)

func init() {

}

func main() {
    db, err := sql.Open("mysql", "root:root@tcp(127.0.0.1:3306)/test?charset=utf8")
    if err != nil {
        panic(err)
    }
    //增加数据
        stmt, err := db.Prepare(`INSERT student (name,age) values (?,?)`)
        res, err := stmt.Exec("wangwu", 26)
        id, err := res.LastInsertId()
        fmt.Println("自增id=", id)
    //修改数据
        stmt, err := db.Prepare(`UPDATE student SET age=? WHERE id=?`)
        res, err := stmt.Exec(21, 5)
        num, err := res.RowsAffected() //影响行数
        fmt.Println(num)
    //删除数据
        stmt, err := db.Prepare(`DELETE FROM student WHERE id=?`)
        res, err := stmt.Exec(5)
        num, err := res.RowsAffected()
        fmt.Println(num)
    //查询数据
    rows, err := db.Query("SELECT * FROM student")

    //--------简单一行一行输出---start
    //    for rows.Next() { //满足条件依次下一层
    //        var id int
    //        var name string
    //        var age int
    //        rows.Columns()

    //        err = rows.Scan(&id, &name, &age)
    //        fmt.Println(id)
    //        fmt.Println(name)
    //        fmt.Println(age)
    //    }
    //--------简单一行一行输出---end

    //--------遍历放入map----start
    //构造scanArgs、values两个数组,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)
    }
    //--------遍历放入map----end
}

 

转载于:https://www.cnblogs.com/wt645631686/p/9691606.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值