【问题标题】:Ignore update data if exist in mysql by node js如果节点js存在于mysql中,则忽略更新数据
【发布时间】:2018-03-19 14:39:09
【问题描述】:

我将检查我的数据的 id 是否存在于 mysql 中更新它,如果不创建它,但在选择结果中它不起作用并转到 esle 部分并在大多数情况下创建操作并获得重复条目错误。最后我通过无限循环运行这个文件。 当我在 redis 中有大量数据时,我应该告诉这个问题。

如果能帮助我,我会很高兴,谢谢:)

这是我的代码:

var 
mysql = require('mysql'),
redis = require('redis'),
infiniteLoop = require('infinite-loop'),
client = redis.createClient(),
lop = new infiniteLoop,
config = require( __dirname + '/app/Config').config,

con = function() {

    return mysql.createConnection({
        host     : config.db_host,
        user     : config.db_user,
        password : config.db_pass,
        database : config.db_name
    });

},

insertDB = function( data ) {

    var connection = con();

    connection.connect( function( err ) {

        connection.query( 'SELECT * FROM real_user WHERE id =' + data.id, function( err, res ) {

            if ( err ) {

                data = JSON.stringify(data);

                client.lpush('aipi', data, function(err,reply) {
                    if ( err ) throw err;
                });

            }

            console.log( "out", data.id, res.length, res );

            if ( typeof res != 'undefined' && res.length > 0  ) {

                console.log( "update", data.id );

                connection.query( 'UPDATE real_user SET ? WHERE id =' + res[0].id, { request_count: data.request_count, updated_at: data.created_at }, 
                    function( err, res ) {
                    if ( err ) throw err;
                });

            } else {

                console.log( "create", data.id );

                connection.query( 'INSERT INTO real_user SET ?', data,  function( err, res ) {
                    if ( err ) throw err;
                });
            }
          connection.end();

        });

    });

},

run = function() {

    var data;

    client.brpop('aipi', 0, function(err, reply) {

        if ( reply[1] ) {

            data = JSON.parse(reply[1]);

            insertDB(data);
        }

    });

};

lop.add(run, []).run();

【问题讨论】:

    标签: mysql node.js redis


    【解决方案1】:

    修复它:

    重复密钥更新

    connection.connect( function( err ) {
    
        connection.query( "INSERT INTO real_user SET ? ON DUPLICATE KEY UPDATE updated_at = '" + data.created_at
         + "', request_count = '" + data.request_count + "'", 
            data,  function( err, res ) {
                connection.end();
            });
    
        });
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-03-21
      • 2017-02-15
      • 2021-06-13
      • 2017-07-14
      • 1970-01-01
      • 2018-04-12
      • 1970-01-01
      • 2022-01-18
      相关资源
      最近更新 更多