mysql2/promise:INSERT 语句在事务查询中无效

编程入门 行业动态 更新时间:2024-10-05 03:31:16

mysql2/promise:INSERT <a href=https://www.elefans.com/category/jswz/34/1770407.html style=语句在事务查询中无效"/>

mysql2/promise:INSERT 语句在事务查询中无效

感谢您的宝贵时间。我在使用 mysql2/promise 包创建事务查询时遇到了问题。

这里是查询:

    await db.execute(`START TRANSACTION`);
    await db.execute(`INSERT INTO user VALUES (?, ?, ?, ?, ?, ?)`, [...userDetails]);
    await db.execute(`INSERT INTO account VALUES (?, ?, ?, ?, ?, ?)`, [...accountDetails]);
    await db.execute(`COMMIT`);

这是我得到的错误:

Error: This command is not supported in the prepared statement protocol yet
code: 'ER_UNSUPPORTED_PS',
  errno: 1295,
  sql: 'START TRANSACTION',
  sqlState: 'HY000',
  sqlMessage: 'This command is not supported in the prepared statement protocol yet'

我想知道是否与我的查询有关?我相信 INSERT 语句在事务块中应该完全没问题。我也试过将每个查询组合成一个字符串,但这似乎也不起作用。

回答如下:

MySQL限制哪些语句可以在prepared statements中完成,

start transaction
是不允许的。请参阅准备好的语句中允许使用的 SQL 语法,这是一个演示。

execute
总是使用和缓存准备好的语句。如果查询很复杂(MySQL 不必每次都解析它)或接受参数(为了安全),这很好。

但是,如果您的查询很简单且不带任何参数,则无需准备。使用只运行 SQL 的

query
。这既避免了你得到的错误,也避免了填满准备好的语句缓存。

    await db.query(`START TRANSACTION`);
    await db.execute(`INSERT INTO user VALUES (?, ?, ?, ?, ?, ?)`, [...userDetails]);
    await db.execute(`INSERT INTO account VALUES (?, ?, ?, ?, ?, ?)`, [...accountDetails]);
    await db.query(`COMMIT`);

更多推荐

mysql2/promise:INSERT 语句在事务查询中无效

本文发布于:2024-05-30 18:05:42,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1770772.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:语句   事务   promise   INSERT

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!