Javascript 在mysql/node.js中的sql事务中传递值
我试图让我的应用程序执行以下SQL语句:Javascript 在mysql/node.js中的sql事务中传递值,javascript,mysql,sql,node.js,Javascript,Mysql,Sql,Node.js,我试图让我的应用程序执行以下SQL语句: START TRANSACTION; SELECT @habitId:=MAX(habits.habitId)+1 FROM habits; INSERT INTO habits(habits.habitId, habits.name, habits.repeatVal, habits.notification, habits.color, habits.question, habits.id) VALUES(@habitId, 'mysql test'
START TRANSACTION;
SELECT @habitId:=MAX(habits.habitId)+1 FROM habits;
INSERT INTO habits(habits.habitId, habits.name, habits.repeatVal, habits.notification, habits.color, habits.question, habits.id) VALUES(@habitId, 'mysql test', 1, 1, '#786578', 'backend hello world', 14);
INSERT INTO habit_status(habit_status.habitId, habit_status.date, habit_status.status) VALUES(@habitId, "2021-04-01", 0), (@habitId, "2021-04-01", 0), (@habitId, "2021-04-01", 0), (@habitId, "2021-04-01", 0), (@habitId, "2021-04-01", 0), (@habitId, "2021-04-01", 0), (@habitId, "2021-04-01", 0), (@habitId, "2021-04-01", 0);
COMMIT;
这是我的代码:
static async save(habit){
const connection = await mysql.createConnection({
host: dbConfig.HOST,
user: dbConfig.USER,
password: dbConfig.PASSWORD,
database: dbConfig.DB
});
await connection.execute('SET TRANSACTION ISOLATION LEVEL READ COMMITTED');
console.log('Finished setting the isolation level to read committed');
await connection.beginTransaction();
console.log('Began Transaction');
try {
await connection.execute('SELECT @habitId:=MAX(habits.habitId)+1 FROM habits');
console.log('first statement completed');
await connection.commit();
await connection.execute('INSERT INTO habits(habits.habitId, habits.name, habits.repeatVal, habits.notification, habits.color, habits.question, habits.id) VALUES (@habitId, ?, ?, ?, ?, ?, ?)', +
[habit.name, habit.repeatVal, habit.notification, habit.color, habit.question, habit.id]);
console.log('second statement completed');
await connection.commit();
await connection.execute('INSERT INTO habit_status(habit_status.habitId, habit_status.date, habit_status.status) VALUES (@habitId, "2021-04-01", 0), (@habitId, "2021-04-02", 0), (@habitId, "2021-04-03", 0), (@habitId, "2021-04-04", 0), (@habitId, "2021-04-05", 0), (@habitId, "2021-04-06", 0), (@habitId, "2021-04-07", 0), (@habitId, "2021-04-08", 0)');
console.log('third statement completed');
await connection.commit();
} catch (err) {
console.error(`Error occurred while creating habit: ${err.message}`, err);
connection.rollback();
console.info('Rollback successful');
return 'error creating habit';
}
事务在第一个select语句后失败,错误如下:
已完成将隔离级别设置为“已提交”
开始交易
第一份声明已完成
创建习惯时出错:通信数据包格式错误。错误:通信数据包格式不正确。
代码:“ER_格式错误的_数据包”,
厄尔诺:1835年,
sqlState:'HY000',
sqlMessage:'格式不正确的通信数据包。'
我的交易有什么问题