javascript - 使用 Node.js、Express 和 MySQL 的更好方法是什么?
问题描述
所以我想知道是否有人有更好的方法来解决我的问题。基本上我想要一条记录在我插入数据库的记录中。我的意思是,我需要在更新时记录对记录所做的所有更改。因此,每当更新记录时,我都会将信息保存在“更新”列中。每次有更新时,我都会从该记录中选择更新,将新信息连接到旧更新上并插入它。请参阅下面的代码。
app.post("/updateRecord", function(req,res){
var prevResultUpdates = "";
async function first(){
con.query("SELECT * FROM Equipment WHERE Serial="+req.body.serial+" AND Part="+req.body.part, function(err,result,fields){
if (err) throw err;
console.log(result[0]['Updates'])
return prevResultUpdates= prevResultUpdates + "," + result[0]['Updates']
});
}
async function second(){
await first();
var customer = req.body.customer;
var update = "\'" + prevResultUpdates + ',' + req.body.update + "," + Number(Date.now()) + "," + req.body.customer + ',' +"\'";
var serial = req.body.serial;
var part = req.body.part;
var sql="Update `Equipment` SET `Customer`= '"+customer+"', `Updates`="+update+" WHERE Serial=" + serial + " AND Part=" + part;
con.query(sql,function(err,result,fields){
if (err) throw err;
res.json(result)
})
}
second();
res.end()
})
关于如何更好地做到这一点的任何想法?
解决方案
这里有一堆建议。
首先,像这样在表中添加一列:
last_change TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
它总是会自动包含每行上最近一次 INSERT 或 UPDATE 操作的时间,而无需您在 SQL 中提及它。
其次,请注意
UPDATE Equipment SET Updates = Updates + ' some text string'
作品。您可以就地更改列,而无需获取其以前的值。但是,当列太长时,这可能会失败。所以,改为这样做。
UPDATE Equipment SET Updates = RIGHT(Updates + ' some text string', 255)
假设您的 Updates 列定义为VARCHAR(255)
. 我使用RIGHT()
而不是LEFT()
因为大概最近的更新是最有趣的。
第三,您可能明智地对此进行规范化,添加一个Equipment_history
表格。不要将更新日志附加到列,而是将新行插入Equipment_history
. 该表可能有这些列
equipment_history_id INT primary key
equipment_id INT foreign key to Equipment table
customer VARCHAR(255) identity of the customer
update VARCHAR(255) reason for update
last_change TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
如果需要,这使您可以重建更新的历史记录。
推荐阅读
- python - 添加新小部件时如何在末尾设置编辑光标?
- spring-boot - SpringBoot WAR 文件部署到 Tomcat 中运行但仍返回 404
- javascript - 如何在没有时间的情况下在 Airbnb 日期范围中使用日期 - 只是日期
- javascript - 如何用 NPM 包中的 ES6 导入替换 CDN 导入?
- prestashop - 如何在 prestashop 中显示来自外部 API 的产品
- java - 将输入字符串转换为类别
- javascript - 新手项目 - 从 BroadcastReceive 开始一个活动
- c - 获得左移负数的警告
- ruby-on-rails - 检查 rspec FactoryBot 中的用户角色
- mysql - 无法添加主键约束