首页 > 解决方案 > 在插入之前检查数据库中是否不存在数据。SQL、节点、快速服务器

问题描述

我有将数据插入数据库的脚本,它可以工作。如果不添加到数据库,我想首先检查具有相同数据的记录是否存在。我的脚本只插入数据库而不检查它。请帮助我如何在插入数据之前检查数据库,然后如果不存在插入数据。

节点 JS 快递服务器:

counter.post('/AddOrderStatus', function(req, res){
    const Status = 'PRINTING';
    const id = req.body.id;
    const nickname = req.body.nickname;
    const MsqlData = {nickname:nickname, status:Status, order_nr:id};
    OrderStatusMysqlConnection.query('INSERT INTO orderdata SET ?', MsqlData, function (error) {
      if (error) {   return res.send('SEND TO ORDERSTATUS DATABASE ERROR');   }
         console.log('DATA SAVED TO ORDERSTATUS DATABASE');
         res.sendStatus(200);   
                }); 
            });

数据库创建:

CREATE DATABASE order orderstatus;

CREATE TABLE `orderdata` (
`id` int(11) NOT NULL,
`nickname` varchar(150) NOT NULL,
`status` varchar(150) NOT NULL,
`order_nr` varchar(25) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
ALTER TABLE `orderdata`
ADD PRIMARY KEY (`id`);
ALTER TABLE `orderdata`
MODIFY `id` int(11) NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=1;

标签: mysqlsqlnode.js

解决方案


可以使用唯一的Key来防止重复。您始终可以使用INSERTON DUPLICATE KEY来防止重复。

INSERT INTO `orderdata` ( `nickname`, `status`, `order_nr`) 
 VALUES ( 'Bernd', '1', '123') 
ON DUPLICATE KEY UPDATE
 status=status;

样本

CREATE TABLE `orderdata` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `nickname` varchar(150) CHARACTER SET latin1 NOT NULL,
  `status` varchar(150) CHARACTER SET latin1 NOT NULL,
  `order_nr` varchar(25) CHARACTER SET latin1 NOT NULL,
  PRIMARY KEY (`id`),
  UNIQUE KEY `uni_nickname` (`nickname`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;



mysql> INSERT INTO `orderdata` ( `nickname`, `status`, `order_nr`)
    -> VALUES
    -> ('Bernd', '1', '123')
    -> ON DUPLICATE KEY UPDATE
    -> status=status;
Query OK, 1 row affected (0.00 sec)

mysql> INSERT INTO `orderdata` (`id`, `nickname`, `status`, `order_nr`) VALUES (1, 'Bernd', '1', '123') ON DUPLICATE KEY UPDATE status=status;
Query OK, 0 rows affected (0.00 sec)

mysql> 

推荐阅读