謝謝你的時間。我在使用 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 陳述句在事務塊中應該完全沒問題。我還嘗試將每個查詢組合成一個字串,但這似乎也不起作用。
uj5u.com熱心網友回復:
MySQL 限制哪些陳述句可以在準備好的陳述句中完成,start transaction是不允許的。請參閱準備好的陳述句中允許的 SQL 語法,這里有一個演示。
execute總是使用和快取準備好的陳述句。如果查詢很復雜(MySQL 不必每次都決議它)或需要引數(為了安全),這很好。
但是,如果您的查詢很簡單并且不帶任何引數,則無需準備它。使用query它只運行 SQL。這既可以避免您遇到的錯誤,也可以避免填滿準備好的陳述句快取。
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`);
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/400234.html
上一篇:AndroidJetpackComposeGrid視圖
下一篇:Node.js-MaxListenersExceededWarning-撰寫Node.jsCLI應用程式時使用readline模塊
