连接mysql数据库 。

//使用mysql
db,err:=sql.Open("mysql","root:abc123456@/staryuhenzdy")    //"user:password@/staryuhenzdy

解析: 使用mysql连接,root是账号,abc123456是密码,@/是默认的数据库端口和地址,staryuhenzdy则是数据库架构


插入数据方式1:

        stmt,err:=db.Prepare("insert into staryuhenzdy.zdy set Name=?,Password=?,Conreol=?")
    check(err)
    res,err:=stmt.Exec("iutrg","ghjgh","2000")
    ids,err:=res.LastInsertId()
    check(err)

解析:Name,Password,Conreol,代表着数据库的三个字段
check指的是处理错误的函数:

func check(err error)  {
    if err !=nil{
        log.Fatalln(err)
    }
}

res.LastInsertId(),指的是返回受影响的id


插入数据的第二种:

        stmt,err:=db.Exec("insert into staryuhenzdy.zdy(Name, Password, Conreol) values(?,?,?)","另一种方式","dsfgsdg",200)
    check(err)
    ids,_:=stmt.LastInsertId() //新增数据的id
    i,_:=stmt.RowsAffected() //受到影响的行
    fmt.Println("新增的数据:",ids,"受到影响的行",i)

解析:Exec操作数据库而不是使用预处理,三个问号对应着数据库的那三个字段staryuhenzdy.zdy(Name, Password, Conreol) 。
后面插入需要的数据。


更新数据:

res,err := db.Exec("update staryuhenzdy.zdy set Conreol=400 where Name=?","另一种方式")

    check(err)
    //更改后的数据
    check(err)
    code,err:=res.RowsAffected()
    check(err)
    fmt.Println(code)

解析:“另一种方式”,表示更新数据的选择字段属性,毕竟where Name,而Conreol=400,表示将Name属性为另一种方式的行的Conreol字段更新为400,在上面增加数据的Conreol字段是200,改了之后变400去了。


删除数据:

    res,err=db.Exec("delete from staryuhenzdy.zdy where Name=?","sdfds")
    check(err)
    i,_=res.RowsAffected()
    fmt.Println(i)

解析:懂得都懂
查询数据:

    //定义数据的架构
    type Doctor struct {
        name string
        password string
        conreol int
    }
    //查询多条数据库
    res3,err:=db.Query("select * from staryuhenzdy.zdy where Conreol>=?",1000)
    var docList []Doctor
    for res3.Next() {
        var doc2 Doctor
        res3.Scan(&doc2.name, &doc2.password, &doc2.conreol)
        //加入数组
        docList = append(docList, doc2)
    }
    fmt.Println("多条数据查询结果", docList)

这里部分使用的查询都是使用Exec类型,建议使用预处理方式sql注入。
Prepare方法会先将sql语句发送给MySQL服务端,返回一个准备好的状态用于之后的查询和命令。返回值可以同时执行多个查询和命令。
预处理增加:

sqlStr := "insert into user(name, age) values (?,?)"
    stmt, err := db.Prepare(sqlStr)
    if err != nil {
        fmt.Printf("prepare failed, err:%v\n", err)
        return
    }
    defer stmt.Close()
    _, err = stmt.Exec("小王子", 18)
    if err != nil {
        fmt.Printf("insert failed, err:%v\n", err)
        return
    }
最后修改:2021 年 06 月 24 日
如果觉得我的文章对你有用,请随意赞赏