mysql - 在插入之前检查数据库中是否不存在数据。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;
解决方案
可以使用唯一的Key来防止重复。您始终可以使用INSERT和ON 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>
推荐阅读
- c# - 如何在派生控制器中模拟 HttpContext.RequestServices.GetService<> 注入的服务?
- python - 任务算法
- sql - 如何找到两个值不同且其中一个可以为 NULL 的行?为什么 NULL != 1 是假的?
- tensorboard - TensorBoard 上只有黑色图像
- google-sheets - 将具有开始和结束日期的单个记录转换为 Google 表格中的多个记录?
- java - 使用 Optionals 对多个属性进行 Java 空检查
- css - 使用 CSS 移动标签元素(无 JS)
- ios - Xamarin iOS 错误 CS7027 使用文件中的公钥对输出进行签名时出错
- tensorflow - 将 tensorflow 2.0 估计器转换为 tensorflow lite
- python - 在单独的函数中使用相同的键值使用 python 解析 JSON 时出现键错误