isql mysql go_Go操作MySQL

连接MySQL

397440299857a1e90afd2ec62ce73f80.png

package main

import (

"database/sql"

"fmt"

_ "github.com/go-sql-driver/mysql"

)

// 定义一个全局对象db

var db *sql.DB

// 定义一个初始化数据库的函数

func initDB() (err error) {

// DSN:Data Source Name

dsn := "root:123456@tcp(localhost:3306)/test_gin?charset=utf8mb4&parseTime=True"

// 不会校验账号密码是否正确

// 注意!!!这里不要使用:=,我们是给全局变量赋值,然后在main函数中使用全局变量db

db, err = sql.Open("mysql", dsn)

if err != nil {

return err

}

// 尝试与数据库建立连接(校验dsn是否正确)

err = db.Ping()

if err != nil {

return err

}

return nil

}

func main() {

err := initDB() // 调用输出化数据库的函数

if err != nil {

fmt.Printf("init db failed,err:%v\n", err)

return

}

}

CRUD

我们先在MySQL中创建一个名为test_gin的数据库

b135e7abf45f7f62c39987837daba991.png

我们先在MySQL中创建一个名为sql_test的数据库

CREATE DATABASE sql_test;

进入该数据库:

use sql_test;

执行以下命令创建一张用于测试的数据表:

CREATE TABLE `user` (

`id` BIGINT(20) NOT NULL AUTO_INCREMENT,

`name` VARCHAR(20) DEFAULT '',

`age` INT(11) DEFAULT '0',

PRIMARY KEY(`id`)

)ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4;

0d4ee9ee1344928991a45d6f7be6732c.png

为了方便查询,我们事先定义好一个结构体来存储user表的数据。

type user struct {

id int

age int

name string

}

单行查询

单行查询db.QueryRow()执行一次查询,并期望返回最多一行结果(即Row)。QueryRow总是返回非nil的值,直到返回值的Scan方法被调用时,才会返回被延迟的错误。(如:未找到结果)

func (db *DB) QueryRow(query string, args ...interface{}) *Row

/ 查询单条数据示例

func queryRowDemo() {

sqlStr := "select id, name, age from user where id=?"

var u user

// 非常重要:确保QueryRow之后调用Scan方法,否则持有的数据库链接不会被释放

err := db.QueryRow(sqlStr, 1).Scan(&u.id, &u.name, &u.age)

if err != nil {

fmt.Printf("scan failed, err:%v\n", err)

return

}

fmt.Printf("id:%d name:%s age:%d\n", u.id, u.name, u.age)

}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值