如果数据库连接closures或数据库服务器closures,会立即执行查询会发生什么情况

假设这个简单的查询。

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(); }); 

执行插入查询后,如果数据库服务器closures或连接立即closures会发生什么情况 它存储数据并返回错误或不存储数据并返回错误?

如果插入查询已经被执行,但是结果还没有被发送到客户端,数据将被存储在数据库中,但是knex会抛出一个错误,那个连接丢失了。

如果这样做是在交易中完成的,在这种情况下,数据将不会被存储,并且knex会抛出相同types的错误。

在这种情况下,您应该可能在事务中执行插入操作,以便您知道如果出现了一些错误,那么数据不在DB内部…但是,例如向DB添加行之后仍有可能无法将结果返回到REST调用和你的前端再次无法确定数据是否被插入,因为有错误。

因此,处理这种情况的最好办法是相信如果一切都成功了,数据就在那里,如果出现错误,用户应该检查数据是否被添加(在现实生活中,如果这不是关键性的,该数据没有被添加并且再次尝试,如果重要的是相同的数据不被发布两次,确保数据库模式具有一些阻止它的约束)。