【Go学习】go-mysql 基础学习

go-mysql 基础学习

1.下载mysql驱动

go需要安装数据库驱动,git下载安装包,

github.com/go-sql-driver/mysql是最基础的包,可能某些框架或者某些插件中有封装更好的mysql操作,但基本操作同下面的是相似的

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

2.打开数据库连接

mysql数据库的链接字符串组织:用户名:密码@tcp(数据库IP:端口)/数据库名?charset=utf8&parseTime=True

如果表中有datetime字段,加上parseTime=True,不然解析不了这个类型。

//打开数据库连接
db, err := sql.Open("mysql", "root:root@tcp(127.0.0.1:3305)/mydatabase?charset=utf8&parseTime=True") 
//记得释放资源
defer db.Close()
if err != nil {  
   fmt.Println("数据库链接错误", err)  
   return  
}  
#假设创建学生表如下
CREATE TABLE `student` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(50) DEFAULT '' COMMENT '姓名',
  `age` int(11) DEFAULT '0' COMMENT '年龄',
  `sex` int(11) DEFAULT '0' COMMENT '性别',
  `addTime` datetime DEFAULT NULL,
  PRIMARY KEY (`id`)
)

3.查询数据 QueryRow 、Query

type Student struct{
    ID int64
    Name string
    Age int32
    Sex int32
    AddTime int32
}

//-----1.单条查询-----
var stu Student
rows := db.QueryRow("select * from student where id = ?", 1)  
rows.Scan(&stu.ID, &stu.Name, &stu.Age, &stu.Sex, &stu.AddTime)

//-----2.多条查询-----
//查询年龄>20的学生
rows2, err := db.Query("select * from student where age > ?", 20)  
if err != nil {  
   fmt.Println("多条数据查询错误", err)  
   return  
}  
//定义对象数组,用于接收数据  
var stuList []Student 
for rows2.Next() {  
    var stu2 Student
    rows2.Scan(&stu.ID, &stu.Name, &stu.Age, &stu.Sex, &stu.AddTime)
    //加入数组  
    stuList = append(stuList, stu2)  
}  

4.修改数据Exec

//-----1.新增数据-----  
result, err := db.Exec("insert into student(name,age,sex,addTime) values(?,?,?,Now())", "张三", 21, 2)
if err != nil {  
   fmt.Println("新增数据错误", err)  
   return  
}  
newID, IDErr := result.LastInsertId()     //新增数据的ID  
i, affectErr := result.RowsAffected()     //受影响行数  

//-----2.修改数据-----  
result2, err := db.Exec("update student set age=20 where id = ?", 1)  
if err != nil {  
   fmt.Println("修改数据错误", err)  
   return  
}  
i2, affectErr2 := result2.RowsAffected() //受影响行数  

//-----3.删除数据------
result3, err := db.Exec("delete from student where name = ?", "张三")  
if err != nil {  
   fmt.Println("删除数据错误", err)  
   return  
}  
i3, affectErr3 := result3.RowsAffected()  

5.事务

//-----1.事务-----  
tx, beginErr := db.Begin()  //开始事务
result4, err := tx.Exec("update doctor_tb set age = age + 1 where name = ?", "张三")  
result5, err := tx.Exec("update doctor_tb set age = age + 1 where name = ?", "李四")  
  
//影响行数,为0则失败
i4, affectErr4 := result4.RowsAffected()  
i5, affectErr5 := result5.RowsAffected()  
if i4 > 0 && i5 > 0 {  
   //2条数据都更新成功才提交事务  
  err = tx.Commit()  //提交事务
   if err != nil {  
      fmt.Println("事务提交失败", err)  
      return  
  }  
   fmt.Println("事务提交成功")  
} else {  
   //否则回滚事务  
  err = tx.Rollback()  //回滚事务
   if err != nil {  
      fmt.Println("回退事务失败", err)  
      return  
  }  
   fmt.Println("回退事务成功")  
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值