go操作mysql数据库

安装好mysql数据库,等各种环境后开始阅读本教程:


创建表:


接下来的几个小节里面我们都将采用同一个数据库表结构:数据库 test,用户表 userinfo
关联用户信息表
userdetail。(用命令行工具进入数据库后输入一下两条命令创建两张表)


CREATE TABLE `userinfo` (
`uid` INT(10) NOT NULL AUTO_INCREMENT,
`username` VARCHAR(64) NULL DEFAULT NULL,
`departname` VARCHAR(64) NULL DEFAULT NULL,
`created` DATE NULL DEFAULT NULL,
PRIMARY KEY (`uid`)
)


CREATE TABLE `userdetail` (
`uid` INT(10) NOT NULL DEFAULT '0',
`intro` TEXT NULL,
`profile` TEXT NULL,
PRIMARY KEY (`uid`)
)
 


然后用Go语言进行增删改查操作,如下:


package main

import (
   _ "github.com/Go-SQL-Driver/MySQL"
   "database/sql"
    "fmt"
   //"time"
)

func main() {
   db, err := sql.Open("mysql", "root:admin@/test?charset=utf8")
   checkErr(err)
   //插入数据
   stmt, err := db.Prepare("INSERT userinfo SET username=?,departname=?,created=?")
   checkErr(err)

   res, err := stmt.Exec("李洪伟", "研发部门", "2012-12-09")
   checkErr(err)

   id, err := res.LastInsertId()
   fmt.Println("id",id)
   checkErr(err)
   //更新数据
   stmt, err = db.Prepare("update userinfo set username=? where uid=?")
   checkErr(err)
   res, err = stmt.Exec("astaxieupdate", id)
   checkErr(err)
   affect, err := res.RowsAffected()
   checkErr(err)
   fmt.Println("affect",affect)
   //查询数据
   rows, err := db.Query("SELECT * FROM userinfo")
   checkErr(err)
   for rows.Next() {
      var uid int
      var username string
      var department string
      var created string
      err = rows.Scan(&uid, &username, &department, &created)
      checkErr(err)
      fmt.Println(uid)
      fmt.Println(username)
      fmt.Println(department)
      fmt.Println(created)
   }
   //删除数据
   stmt, err = db.Prepare("delete from userinfo where uid=?")
   checkErr(err)
   res, err = stmt.Exec(4)
   checkErr(err)
   affect, err = res.RowsAffected()
   checkErr(err)
   fmt.Println(affect)
   db.Close()
}
func checkErr(err error) {
   if err != nil {
      panic(err)
   }
}


代码注解: 


通过上面的代码我们可以看出,Go操作 Mysql 数据库是很方便的。
关键的几个函数我解释一下:
sql.Open()函数用来打开一个注册过的数据库驱动,Go-MySQL-Driver中注册了 mysql 这个
数据库驱动,第二个参数是
DNS(Data Source Name),它是Go-MySQL-Driver 定义的一些
数据库链接和配置信息。它支持如下格式:
user@unix(/path/to/socket)/dbname?charset=utf8
user:password@tcp(localhost:5555)/dbname?charset=utf8
user:password@/dbname

user:password@tcp([de:ad:be:ef::ca:fe]:80)/dbname


db.Prepare()函数用来返回准备要执行的sql 操作,然后返回准备完毕的执行状态。
db.Query()函数用来直接执行Sql 返回 Rows结果。
stmt.Exec()函数用来执行stmt 准备好的 SQL 语句
我们可以看到我们传入的参数都是
=?对应的数据,这样做的方式可以一定程度上防止SQL
注入。



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ITzhongzi

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值