【问题标题】:How does one create a stored procedure in Node.js using the mysql library?如何使用 mysql 库在 Node.js 中创建存储过程?
【发布时间】:2017-11-18 18:05:05
【问题描述】:

如何使用 mysql 库在 Node.js 中创建存储过程? npm包mysql是否支持创建存储过程或者这段代码有错误?这是我正在使用的 npm 库:https://www.npmjs.com/package/mysql

我正在尝试为一个开源项目自动设置数据库,以帮助新的贡献者启动并运行他们的开发环境(让我们所有人使用相同的数据库架构)。

为此,我编写了一个脚本,该脚本应该将所有命令发送到 mysql 实例以设置数据库。创建表是可行的,但创建新的存储过程总是会导致错误。当我在 MySQL Workbench 中运行命令时,创建脚本确实有效,因此问题似乎仅限于脚本。

var emails =
        "CREATE TABLE emails (" +
            "`id` INT NOT NULL AUTO_INCREMENT PRIMARY KEY," +
            "`email` VARCHAR(2048) CHARACTER SET utf8" +
        ");";

var addEmail =
        "DELIMITER //\n" +
        "CREATE PROCEDURE addEmail(IN email VARCHAR(2048))\n" +
        "BEGIN\n" +
        "INSERT INTO emails (email) VALUES (email);\n" +
        "END //\n" +
        "DELIMITER ;";

var query = [];
query.push(emails);
query.push(addEmail);

for(var i = 0; i < query.length; i++) {

    console.log(query[i]);
    connection.query(query[i], function (err, rows, fields) {
        if (!err) {
            console.log("success"); //emails succeeds, as do other create table commands
        } else {
            console.log('Error while performing Query.'); //any queries that create stored procedures fail
        }
    });

}

从接受的答案中得到很好的建议,更正后的代码如下所示:

var addEmail =
        "CREATE PROCEDURE addEmail(IN email VARCHAR(2048))\n" +
        "BEGIN\n" +
        "INSERT INTO emails (email) VALUES (email);\n" +
        "END";

【问题讨论】:

    标签: mysql node.js stored-procedures


    【解决方案1】:
    1. 以编程方式运行 SQL 时,无需使用 DELIMITER。仅当使用mysql 客户端手动或从脚本文件执行 SQL 语句流时才需要 DELIMITER。当您一次运行一个查询时,您不必解决关于过程定义中的 ; 是否是语句结尾的任何歧义。

    2. 您最好从查询中检查错误状态,但您也应该养成检查错误类型和错误消息的习惯。这将帮助您解决多种类型的问题——无需发布到 Stack Overflow 并希望有人及时回答您的问题!

      connection.query(query[i], function (err, rows, fields) {
          if (!err) {
              console.log("success");
          } else {
              console.log('Error while performing Query.');
              console.log(err.code);
              console.log(err.message);
          }
      });
      

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-03-02
      • 1970-01-01
      • 2021-07-28
      • 1970-01-01
      • 2013-08-10
      • 1970-01-01
      • 2021-09-30
      相关资源
      最近更新 更多