mysql - 如果数据库连接关闭或数据库服务器关闭立即执行查询会发生什么

标签 mysql node.js knex.js

假设这个简单的查询。

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

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

最佳答案

如果插入查询已执行,但结果尚未发送到客户端,数据将存储在数据库中,但 knex 将抛出错误,即连接丢失。

如果那是在交易中完成的,那么数据就不会被存储,knex 就会抛出同样的错误。

在这种情况下,您可能应该在事务中进行插入,这样您就会知道如果出现错误,数据不在数据库中......但是仍然有可能在将行添加到数据库之后,例如 express 失败将结果返回给 REST 调用,您的前端再次无法确定是否插入了数据,因为出现错误。

所以处理这种情况的最好方法是相信如果一切都成功的话数据就在那里,如果有错误,用户应该检查数据是否被添加(在现实生活中如果没有关键只是假设没有添加数据并重试,如果相同的数据没有被发布两次是至关重要的,请确保数据库模式有一些限制来阻止它。

关于mysql - 如果数据库连接关闭或数据库服务器关闭立即执行查询会发生什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46695883/

相关文章:

javascript - 从多个调用发出单个 HTTP 请求

javascript - 马科和 Koajs : Why is my async-fragment rendering not working?

node.js - 无法删除 azure 上的 wwwroot

node.js - 使用 knex-postgis 进行动态查询

mysql - 优化Mysql查询Left Join

mysql - #1022 重复的外键 - MySQL 错误

php - 在 Yii 框架中配置数据库连接

php - 显示数据库中选定的记录

knex.js - 创建 knex 迁移

javascript - 从异步函数返回时如何防止 Knex.js 运行查询对象?