文档章节

mysql数据插入前判断是否存在

o
 osc_a22drz29
发布于 2019/03/23 22:54
字数 400
阅读 3
收藏 0

精选30+云产品,助力企业轻松上云!>>>

今天在对一些抓取到的数据做插入的时候,因为使用了定时器,每间隔几分钟会抓取一次,导致很多数据插入的是重复数据,为了解决这个问题, 一般是在插入之前先通过一个标识去查询表数据看是否已经有了,没有再执行插入操作

一开始我的做法是,执行两次sql语句操作,先select,再insert

let result = await this.app.mysql.select('tb_news_topic', {
        where: { order: list.data[i].order }
      });
      if (!result[0]){
        await this.app.mysql.insert('tb_news_topic', {
          title: list.data[i].title,
          summary: list.data[i].summary,
          url: '',
          order: list.data[i].order,
          publishDate: new Date(list.data[i].publishDate),
          createdAt: this.app.mysql.literals.now//当前时间
        });
      }

以上做法,虽然能实现功能达到目的,但感觉不太优雅,效率比较低,后来了解到mysql支持直接写sql语句做判断,通过查询表数据是否存在,不存在则执行插入操作

    INSERT INTO tb_news_topic(title,summary) SELECT '218', 
'XQ33019920170811142528217' FROM DUAL WHERE NOT EXISTS(SELECT * 
FROM tb_news_topic WHERE title = '111')

语法

INSERT INTO table(field1, field2, fieldn) SELECT 'field1', 
'field2', 'fieldn' FROM DUAL WHERE NOT EXISTS(SELECT field FROM 
table WHERE field = ?)

修改代码,改成sql语句直接判断

for (let i = 0; i < list.data.length;i++){
    let sql = `INSERT INTO tb_news_topic(title,summary,url,topic_order,publishDate,createdAt) SELECT ?, 
?,?,?,?,? FROM DUAL WHERE NOT EXISTS(SELECT * 
FROM tb_news_topic WHERE title = ?)`
      // 直接执行sql语句
      const results = await this.app.mysql.query(sql, [list.data[i].title, 
        list.data[i].summary, 
        '',
        list.data[i].order, 
        new Date(list.data[i].publishDate), 
        this.app.mysql.literals.now,//当前时间
        list.data[i].title
      ]);
 }

另外,这里碰到了个问题,通过foreach遍历数组的时候,foreach里面不能使用await ,所在这个地方我用的for循环对数组进行遍历

o
粉丝 0
博文 500
码字总数 0
作品 0
私信 提问
加载中
请先登录后再评论。
Mysql 存在既更新,不存在就添加(sql语句)

讨人喜欢的 MySQL replace into 用法(insert into 的增强版) 在向表中插入数据的时候,经常遇到这样的情况:1. 首先判断数据是否存在; 2. 如果不存在,则插入;3.如果存在,则更新。 在 ...

osc_0ij3yxc4
2019/11/20
22
0
讨人喜欢的 MySQL replace into 用法(insert into 的增强版)

讨人喜欢的 MySQL replace into 用法(insert into 的增强版) 在向表中插入数据的时候,经常遇到这样的情况:1. 首先判断数据是否存在; 2. 如果不存在,则插入;3.如果存在,则更新。 在 ...

凡16
2014/03/07
237
0
MySQL replace into 用法

讨人喜欢的 MySQL replace into 用法(insert into 的增强版) 在向表中插入数据的时候,经常遇到这样的情况:1. 首先判断数据是否存在; 2. 如果不存在,则插入;3.如果存在,则更新。 在 ...

王锐
2012/07/06
123
0
foreachRDD

需求: 将统计结果写入到MySQL 通过该sql将统计结果写入到MySQL 存在的问题: 1) 对与已有的数据做更新,而是对所有的数据均为insert 改进思路: a) 在插入数据前先判断单词是否存在,如果存在就u...

osc_ovsx5e3f
2019/05/15
2
0
MySQL replace into 用法(insert into 的增强版)

REPLACE INTO usersesum SELECT * FROM config_user_se_sum; 在向表中插入数据的时候,经常遇到这样的情况:1. 首先判断数据是否存在; 2. 如果不存在,则插入;3.如果存在,则更新。 在 SQ...

五大三粗
2015/05/18
17
0

没有更多内容

加载失败,请刷新页面

加载更多

基于 opencv 的图像处理入门教程

点击上方“算法猿的成长“,关注公众号,选择加“星标“或“置顶” 总第 146 篇文章,本文大约 5000 字,阅读大约需要 20 分钟 前言 虽然计算机视觉领域目前基本是以深度学习算法为主,但实际...

kbsc13
昨天
0
0
屁宝杀手升级啦!支持 Creator 2.4.0及所有2.X版本

2017年无意间写了两篇关于在 Cocos Creator 中使用 Protobufjs 的文章,随后开始了自己第一个副业产品pbkiller—屁宝杀手!没想到,一个小小的 Creator 插件工具,还活了这么久! 经过3年,直...

张晓衡
昨天
0
0
使用HTML5的自定义数据属性的jQuery选择器 - jQuery selectors on custom data attributes using HTML5

问题: I would like to know what selectors are available for these data attributes that come with HTML5. 我想知道哪些选择器可用于HTML5附带的这些数据属性。 Taking this piece of H......

javail
22分钟前
9
0
使用Jibri进行Jitsi Meet视频录制

前言 我们在做视频会议系统的时候,通常都会有会议录制功能,那么作为视频会议开源的翘楚,Jitsi是怎么做这一点的,在官方文档及其隐晦的情况下,我们该怎么成功搭建视频录制服务呢?下面我就...

死磕音视频
24分钟前
9
0
虚拟dom

一、什么是虚拟dom virtual dom(虚拟dom),是由普通的js对象来描述dom对象,因为不是真实的dom,所以叫virtual dom。 二、为什么要用虚拟dom来描述真实的dom? 举个例子,我们获取一个dom元素...

一生懸命吧
24分钟前
41
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部