zoukankan      html  css  js  c++  java
  • mysql数据插入前判断是否存在

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

    一开始我的做法是,执行两次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循环对数组进行遍历

  • 相关阅读:
    centos 编程环境
    git 安装 使用
    nodejs 笔记
    微信开发
    composer 使用笔记
    一:安装centos 7最小编程环境 xfce桌面
    二: 安装centos服务环境软件mysql httpd php
    我的通用程序规范及说明
    常用js代码集
    三 , lnmp 一键包安装使用
  • 原文地址:https://www.cnblogs.com/fozero/p/10586117.html
Copyright © 2011-2022 走看看