假设这个简单的查询。
var knex = require("knex")(knexConfig);
var insert1 = {col1: "a4", col2: "b4", col3: "c4"};
knex.insert(insert1).into("test").then(function (id) {
console.log(id);
})
.finally(function() {
knex.destroy();
});
如果在执行插入查询后数据库服务器关闭或连接立即关闭会发生什么?它是存储数据和返回错误还是不存储数据并返回错误?
答案 0 :(得分:0)
如果已执行插入查询,但尚未将结果发送到客户端,则数据将存储在数据库中,但knex
将引发错误,该连接已丢失。
如果在事务中已经完成,那么数据就不会被存储,knex
会抛出同样的错误。
在这种情况下,您应该在事务中执行插入操作,以便您知道如果出现了一些错误,数据不在DB内...但是仍然有可能在向DB添加行后例如express失败将结果返回到REST调用并且您的前端再次无法确定是否插入了数据,因为存在错误。
因此,处理此类情况的最佳方法是,只要相信一切都成功就会存在数据,并且如果出现错误,用户应检查数据是否已添加(如果不是这样,则在现实生活中)关键只是假设没有添加数据并再次尝试,如果相同的数据没有发布两次是至关重要的,请确保数据库模式有一些约束阻止它。)