初级篇学会插入数据

package main

import "database/sql"

import "fmt"

import "time"

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

func main() {

db, e := sql.Open("mysql","dlan:[email protected](xx.xx.xx.xx:3306)/aa?charset=utf8")

if e != nil {

fmt.Println ("error")

return

}

fmt.Println("Conn DB OK")

start :=time.Now()

tx,_:=db.Begin()

for i :=1;i<=1000;i++{

fmt.Println(i)

tx.Exec("insert into aa(id,c_type)value(?,?)",i,i+2)

}

tx.Commit()

end :=time.Now()

fmt.Print(end.Sub(start).Seconds())

}

###

深入内部分析原因分析:

1、sql.Open("mysql","dlan:[email protected](xx.xx.xx.xx:3306)/aa?charset=utf8")

功能:返回一个DB对象,DB对象对于多个goroutines并发使用时安全的,DB对象内部封装了连接池

实现:open函数并没有创建链接,它只是验证参数是否合法,然后开启一个单独goroutines去监听是否需要建立新的连接,当有请求建立时就创建

2、db.Query()

用于检索,比如select

功能:db交给内部的Query方法负责查询,query首先调用db内部的conn方法从连接池里获得一个连接,然后调用内部的queryConn方法负责查询

db.Query() 调用完毕后会将连接传递给sql.Rows类型,当然后者迭代完毕或者显示的调用.Clonse()方法后,连接将会被释放回到连接池

3、db.QueryRow()

功能:用于返回单行的查询

实现:转交给db.Query()查询

db.QueryRow()调用完毕后会将连接传递给sql.Row类型,当.Scan()方法调用之后把连接释放回到连接池

4、db.Prepare()

功能:返回一个Stmt,Stmt对象可执行Exec,Query,QueryRow等操作

实现:db交给内部的prepare方法负责查询,prepare首先调用db内部的conn方法从连接池里获得一个连接,然后调用driverConn的prepareLocked方法查询

Stmt相关方法:

st.Exec()

st.Query()

st.QueryRow()

st.Close()

5、db.Begin()

功能:开启事务,返回Tx对象,调用该方法后,这个TX就和制定的连接绑定在一起,一旦事物提交或者回滚,该事物绑定的连接就还给db的连接池

实现:db交给内部的begin方法负责处理,begin首相调用db内部的conn方法从连接池里面获得一个连接,然后调用Conn接口Begin方法获得一个TX

TX相关方法:

tx.Exec()

tx.Query()

tx.QueryRow()

tx.Prepare()

tx.Commit()

tx.Rollback()

tx.Stmt()//用于将一个已存在的statement和tx绑定在一起

db.Begin() 调用完毕后将连接传递给sql.Tx类型对象,当.Commit()或.Rollback()方法调用后释放连接

6、db.Ping(): 调用完毕后会马上把连接返回给连接池

7、db.Exec() 调用完毕后会马上把连接返回给连接池,但是它返回的Result对象还保留这连接的引用,当后面的代码需要处理结果集的时候连接将会被重用

配置连接池有两个的方法:

db.SetMaxOpenConns(n int) 设置打开数据库的最大连接数。包含正在使用的连接和连接池的连接。如果你的函数调用需要申请一个连接,并且连接池已经没有了连接或者连接数达到了最大连接数。此时的函数调用将会被block,直到有可用的连接才会返回。设置这个值可以避免并发太高导致连接mysql出现too many connections的错误。该函数的默认设置是0,表示无限制。

db.SetMaxIdleConns(n int) 设置连接池中的保持连接的最大连接数。默认也是0,表示连接池不会保持释放会连接池中的连接的连接状态:即当连接释放回到连接池的时候,连接将会被关闭。这会导致连接再连接池中频繁的关闭和创建。

对于连接池的使用依赖于你是如何配置连接池,如果使用不当会导致下面问题:

  1. 大量的连接空闲,导致额外的工作和延迟。
  2. 连接数据库的连接过多导致错误。
  3. 连接阻塞。
  4. 连接池有超过十个或者更多的死连接,限制就是10次重连。

####Go语言语法格式,需要注意大小写以及边界,目前学习到此...

时间: 2024-12-16 07:40:19

初级篇学会插入数据的相关文章

NSIS安装制作基础教程[初级篇], 献给对NSIS有兴趣的初学者

NSIS安装制作基础教程[初级篇], 献给对NSIS有兴趣的初学者 作者: raindy 来源:http://bbs.hanzify.org/index.php?showtopic=30029 时间:2005-02-15 点击:70791 raindy NSIS简介: NSIS 是“Nullsoft 脚本安装系统”(Nullsoft Scriptable Installation System)的缩写,它是一个免费的 Win32 安装.卸载系统,它的特点:脚本简洁高效:系统开销小:当然进行安装.

(转)25个增强iOS应用程序性能的提示和技巧--初级篇

(转)25个增强iOS应用程序性能的提示和技巧--初级篇 本文转自:http://www.cocoachina.com/newbie/tutorial/2013/0408/5952.html 在开发iOS应用程序时,让程序具有良好的性能是非常关键的.这也是用户所期望的,如果你的程序运行迟钝或缓慢,会招致用户的差评.然而由于iOS设备的局限性,有时候要想获得良好的性能,是很困难的.在开发过程中,有许多事项需要记住,并且关于性能影响很容易就忘记. 本文收集了25个关于可以提升程序性能的提示和技巧,把

25个增强iOS应用程序性能的提示和技巧(初级篇)

25个增强iOS应用程序性能的提示和技巧(初级篇) 标签: ios内存管理性能优化 2013-12-13 10:53 916人阅读 评论(0) 收藏 举报  分类: IPhone开发高级系列(34)  在开发iOS应用程序时,让程序具有良好的性能是非常关键的.这也是用户所期望的,如果你的程序运行迟钝或缓慢,会招致用户的差评.然而由于iOS设备的局限性,有时候要想获得良好 “” 阅读器 在开发iOS应用程序时,让程序具有良好的性能是非常关键的.这也是用户所期望的,如果你的程序运行迟钝或缓慢,会招致

AGS中通过FeatureServer插入数据失败、插入数据在WMTS请求中无法显示以及version概念的讨论

1.背景 在多个项目中,当我方接口给其他部门人员使用时出现了插入数据失败或者插入的数据在WMTS请求中无法显示出来的问题.针对这些问题,我在这篇文章中,将详细描述造成以上问题的原因.在此WebGIS产品的前台和后台接口中,此插入数据核心部分均是FeatureServer请求.所以我们首先对FeatureSever服务做一个大致的了解. 2.FeatureServer服务的大致了解 2.1 FeatureServer服务提供的功能 FeatureServer服务可以提供如下几种服务: 我们可以得出

SQL Server 批量插入数据的两种方法

在SQL Server 中插入一条数据使用Insert语句,但是如果想要批量插入一堆数据的话,循环使用Insert不仅效率低,而且会导致SQL一系统性能问题.下面介绍SQL Server支持的两种批量数据插入方法:Bulk和表值参数(Table-Valued Parameters). 运行下面的脚本,建立测试数据库和表值参数. [c-sharp] view plaincopy --Create DataBase create database BulkTestDB; go use BulkTes

关于mysql数据库插入数据,不能插入中文和出现中文乱码问题

首先,推荐一篇博客:http://www.cnblogs.com/sunzn/archive/2013/03/14/2960248.html 当时,我安装完mysql数据库后,新建一个数据库后插入数据,首先出现了中文不能插入mysql数据库的问题,解决办法如下: 修改mysql文件中my.ini里的 sql-mode="STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION"变成sql-mode="NO_A

SQL Server插入数据和删除数据基础语句使用

首先在我的Student表中插入几条数据,由于我的表已经创建完成了,所以就没有创建表的 sql 语句了,不过可以看我的上一篇文章: http://www.cnblogs.com/Brambling/p/6649350.html 插入数据sql语句: 1 insert into Student(S_StuNo,S_Name,S_Sex,S_Height) 2 select '001','项羽','男','190' union 3 select '002','刘邦','男','170' union

微软BI 之SSIS 系列 - 使用 Script Component Destination 和 ADO.NET 解析不规则文件并插入数据

开篇介绍 这一篇文章是 微软BI 之SSIS 系列 - 带有 Header 和 Trailer 的不规则的平面文件输出处理技巧 的续篇,在上篇文章中介绍到了对于这种不规则文件输出的处理方式.比如下图中的这种不规则文件,第一行,第二行 Header 部分,第三行的内容 Content 部分,最后一行的 Trailer 部分. 在前几个课程 微软BI SSIS 2012 ETL 控件与案例精讲 第43,44,45,46 课中,我分别讲解了如何使用 .Script Component Source 解

移动端https抓包那些事--初级篇

对于刚刚进入移动安全领域的安全研究人员或者安全爱好者,在对手机APP进行渗透测试的时候会发现一个很大的问题,就是无法抓取https的流量数据包,导致渗透测试无法继续进行下去. 这次给大家介绍一些手机端如何抓取https流量的技巧. 下面将主要通过两个层次篇章来逐步向大家进行介绍: 第一篇章-初级篇:浅层次抓包.对于非root设备(Android)或非越狱设备(iOS)如何抓取https流量: 第二篇章-进阶篇:深层次抓包.对于root设备或者越狱设备如何抓取https流量. 对于非root An