GO web 开发 实战三,数据库预处理

本文介绍了Go语言中使用预处理进行MySQL操作,对比了普通SQL与预处理的执行过程,强调了预处理在性能和安全性上的优势。还探讨了Go实现MySQL事务的机制,并提到了sqlx库的使用,以及如何结合gin框架和RESTful API进行高效开发。最后鼓励读者实践并提供反馈。
摘要由CSDN通过智能技术生成

上一篇文章我们进行了数据操作,都是使用占位符的方式来操作的

咱们其实可以使用 mysql 预处理的方式来操作这些

那么我们一起来看看什么是已处理呢?

什么是预处理?

了解什么是预处理,我们可以来对比一下,普通的 sql 语句执行过程和 预处理的执行过程

普通 sql 语句执行过程:

  • 客户端对 SQL 语句进行 占位符 替换得到完整的 sql 语句
  • 客户端发送完整 sql 语句到 mysql 服务端
  • mysql 服务端执行完整的 sql 语句并将结果返回给客户端

预处理执行过程:

  • 把 sql 语句分成两部
    • 命令部分
    • 数据部分
  • 先把命令部分发送给 mysql 服务端,mysql 服务端进行 sql 预处理
  • 然后把数据部分发送给 mysql 服务端, mysql 服务端对 sql 语句进行占位符替换
  • mysql 服务端执行完整的 sql 语句并将结果返回给客户端

通过步骤和流程,我们大概知道预处理肯定比普通的 sql 执行快

那么预处理有啥好处?

  • 优化 mysql 服务器重复执行 sql 的方法,可以提升服务器性能,提前让服务器编译,一次编译多次
    执行,节省后续编译的成本
  • 避免 sql 注入的问题
//预处理 插入数据操作
func prepareInfo(db *sql.DB) {
   
	sqlInfo := "insert into user (name,age)values(?,?)"

	stmt, err := db.Prepare(sqlInfo)
	if err != nil {
   
		fmt.Println("Exec err : ", err)
		return
	}

	ret, err := stmt.Exec("花猪2", 28)
	if err != nil {
   
		fmt.Println("stmt Exec err : ", err)
		return
	}
	ret, err = stmt.Exec("花猪3", 28)
	if err != nil {
   
		fmt.Print
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值