gpt4 book ai didi

mysql - 如何使用 mysql 库在 Node.js 中创建存储过程?

转载 作者:行者123 更新时间:2023-11-29 02:12:45 25 4
gpt4 key购买 nike

如何使用 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";

最佳答案

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

关于mysql - 如何使用 mysql 库在 Node.js 中创建存储过程?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47369349/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com