连接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 } ``` Loading... 连接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 日 © 允许规范转载 打赏 赞赏作者 支付宝微信 赞 如果觉得我的文章对你有用,请随意赞赏