本文结合使用场景简单介绍sql中的insert、update的使用。

以下是代码:

如果记录已经存在,则更新,否则插入新记录。

package main

import (
"database/sql"
"fmt"
"log"
"time" _ "github.com/go-sql-driver/mysql" ) var DB *sql.DB var dataBase = "root:123456@tcp(127.0.0.1:3306)/web_portal?loc=Local&parseTime=true" func Init() {
var err error
DB, err = sql.Open("mysql", dataBase)
if err != nil {
log.Fatalln("open db fail:", err)
} DB.SetMaxOpenConns(20)
DB.SetMaxIdleConns(15) err = DB.Ping()
if err != nil {
log.Fatalln("ping db fail:", err)
}
} func main() { Init() entry() } // update first, if not exist, then try to insert
func entry() { now := time.Now().Unix()
sql := fmt.Sprintf(
"update tbl_host set version='%s', timestamp='%d' where ip='%s'",
"3.20.2",
now,
"192.168.11.23",
) log.Println("sql:", sql) result, err := DB.Exec(sql)
if err != nil {
log.Println("exec failed:", err, ", sql:", sql)
return
} idAff, err := result.RowsAffected()
if err != nil {
log.Println("RowsAffected failed:", err)
return
}
log.Println("id:", idAff)
if idAff == 0 {
sql := fmt.Sprintf(
"insert into tbl_host(ip, version, timestamp) values ('%s', '%s', '%d')",
"192.168.11.23",
"3.20.1",
now,
) log.Println("not exsit, then try to insert")
tryInsert(sql) } log.Println("sucess")
} func tryInsert(sql string) { _, err := DB.Exec(sql)
if err != nil {
log.Println("exec failed:", err, ", sql:", sql)
} }

output:

第一次执行,记录不存在,update不影响任何行,然后尝试insert操作。

2018/04/30 22:15:13 sql: update tbl_host set version='3.20.2', timestamp='1525097713' where ip='192.168.11.23'

2018/04/30 22:15:13 id: 0

2018/04/30 22:15:13 not exsit, then try to insert

2018/04/30 22:15:13 sucess

再次执行,此时已经存在同一个ip的记录,只会执行update更新:

2018/04/30 22:13:30 sql: update tbl_host set version='3.20.2', timestamp='1525097610' where ip='192.168.11.22'

2018/04/30 22:13:30 id: 1

2018/04/30 22:13:30 sucess

Go sql insert update使用举例的更多相关文章

  1. Linq to SQL -- Insert、Update、Delete

    Insert/Update/Delete操作 插入(Insert) 1.简单形式 说明:new一个对象,使用InsertOnSubmit方法将其加入到对应的集合中,使用SubmitChanges()提 ...

  2. sql中同一个Trigger里同时包含Insert,Update,Delete

    sql中同一个Trigger里同时包含Insert,Update,Delete SQLServer是靠Inserted表和Deleted表来处理的,判断一下就可以了,只不过比ORACLE麻烦一点 cr ...

  3. sql insert、update、delete完以后返回主键ID

    以前只用过在insert完以后利用select @@IDENTITY返回主键ID,最近在做微信公众平台,遇到一个需求是在帮绑定万微信openid后自动完成登陆,这就需要update以后返回主键ID,查 ...

  4. LINQ体验(9)——LINQ to SQL语句之Insert/Update/Delete操作

    我们继续讲解LINQ to SQL语句,这篇我们来讨论Insert/Update/Delete操作.这个在我们的程序中最为常用了.我们直接看例子. Insert/Update/Delete操作 插入( ...

  5. 踩坑事件:不能对基于文本的临时表使用sql insert语句

    先来描述一下问题: 如果你是从基于文本的数据源来创建DataFrame的,当你将DataFrame注册为临时表后,如果对这个临时表进行insert into 操作,会抛出异常的. 问题答案参见:htt ...

  6. 关于MyBatis mapper的insert, update, delete返回值

    这里做了比较清晰的解释: http://mybatis.github.io/mybatis-3/java-api.html SqlSession As mentioned above, the Sql ...

  7. PHP5: mysqli 插入, 查询, 更新和删除 Insert Update Delete Using mysqli (CRUD)

    原文: PHP5: mysqli 插入, 查询, 更新和删除  Insert Update Delete Using mysqli (CRUD) PHP 5 及以上版本建议使用以下方式连接 MySQL ...

  8. 《oracle每天一练》Merge Into 语句代替Insert/Update在Oracle中的应用实战

    转载自窃破天道 动机: 想在Oracle中用一条SQL语句直接进行Insert/Update的操作. 说明: 在进行SQL语句编写时,我们经常会遇到大量的同时进行Insert/Update的语句 ,也 ...

  9. 使用Merge Into 语句实现 Insert/Update

    网址: http://www.eygle.com/digest/2009/01/merge_into_insertupdate.html 动机: 想在Oracle中用一条SQL语句直接进行Insert ...

随机推荐

  1. 2019-03-07-day006-小数据池

    01 昨日内容回顾 字典: 映射,{} 键值对的形式存储,容器型数据类型,key 唯一的,可哈希的,value任意数据类型,对象. 3.6之前无序的, 3.6之后,有序的(第一次创建字典的顺序) 特点 ...

  2. 4--Python入门--Python数据集合类型--集合

    在基础数据类型的基础上,Python有6中数据集合的类型: 列表list,最常用的数据类型,以[]为标识 元组tuple,和list很相似,但是不能二次赋值,用()标识 集合set,和list类似,但 ...

  3. 5--Selenium环境准备--firefox与geckodriver

    selenium2时打开firefox浏览器是不需要安装firefoxdriver的,但是selenium3不支持向前支持火狐浏览器了,40以后版本的火狐,运行会出现问题. 1.下载geckodriv ...

  4. mac下python安装MySQLdb模块

    参考:http://blog.csdn.net/yelyyely/article/details/41114449 1.调整到anaconda下的python 2.安装有关程序 brew instal ...

  5. skflow 分类与回归接口API 简单测试

    skflow也即是 tf.contrib.learn, 是 TensorFlow 官方提供的另外一个对 TensorFlow 的高层封装,通过这个封装,用户可以和使用 sklearn 类似的方法使用 ...

  6. [LeetCode&Python] Problem 706. Design HashMap

    Design a HashMap without using any built-in hash table libraries. To be specific, your design should ...

  7. lesson2-cnn-fastai

    %mkdir的做法glob('.jpg')np.random.permutation(图片)np.random.rename(,)#save_array:utils中,连接每个btch得到的数组#ke ...

  8. 第15次Scrum会议(10/27)【欢迎来怼】

    一.小组信息 队名:欢迎来怼 小组成员 队长:田继平 成员:李圆圆,葛美义,王伟东,姜珊,邵朔,冉华 小组照片 二.开会信息 时间:2017/10/27 17:20~17:45,总计25min. 地点 ...

  9. Wood Chipping Text Animation

    Blender Tutorial: Wood Chipping Text Animationhttps://www.youtube.com/watch?v=YFmN7eTNfNw 文字建模 木板建模, ...

  10. 20165313 《Java程序设计》第七周学习总结

    教材学习总结 1.下载安装MySQL数据库管理系统. 2.MySQL数据库基本操作. 3.利用JAVA程序对MySQL数据库系统进行查找,更新,添加和删除操作. 学习中的问题与解决方案 1.运行书上安 ...