いくつかのクエリで構成されるSQLクエリを実行する方法はありますか?Mysqljs、1つのクエリでいくつかのクエリ
次の例では、構文エラーを返します:
connection.query('UPDATE table1 SET field="1" WHERE id=1; UPDATE table1 SET field="2" WHERE id=2;'
,function(error, results, fields) {});
いくつかのクエリで構成されるSQLクエリを実行する方法はありますか?Mysqljs、1つのクエリでいくつかのクエリ
次の例では、構文エラーを返します:
connection.query('UPDATE table1 SET field="1" WHERE id=1; UPDATE table1 SET field="2" WHERE id=2;'
,function(error, results, fields) {});
あなたはMySQLのパッケージには、複数のステートメントクエリをサポートしていないことがあります。どのMySQLパッケージを使用しているのかは明らかではありません(そこにはいくつかあります)。いくつかの言語のコネクタの中にはこの能力があります(私はPHPを特に考えています)。しかし、node.jsパッケージがあるかどうかはわかりません。
しかし...これはとにかく良い練習ではありません。表示するには、なぜ、一つの大きな長い文字列として実行したクエリのリスト全体を考える:私は意図的にキーワードをスペルミスので
connection.query(`
UPDATE table1 SET field='a' WHERE id=1;
UPDATE table1 SET field='b' WHERE id=2;
UPDATE table1 SIT field='c' WHERE id=3;
UPDATE table1 SET field='d' WHERE id=4;
UPDATE table1 SET field='e' WHERE id=5;
`, function (err, results, fields) {});
このクエリは、MySQLの構文エラーで失敗する予定です。しかし、MySQLコネクタから単一の「構文エラー」を取得するだけで、問題を見つけようとする各クエリを調べるまではあなた次第です。このような単純なエラーの場合、それほど難しくないかもしれませんが、複雑なロジックを持つ長いクエリを作成し、それらをすべて1つの長い文字列に連結すると、デバッグは非常に困難になります。
あなたはこの種のものでパフォーマンスを向上させようとしているかもしれませんが、得られるパフォーマンスの向上は軽微です。クエリをデータベースサーバー(個別のデータベースの代わりに1つの大きな文字列)に転送する時間を節約しますが、サーバーは各クエリを一度に1つずつ実行する必要があります。
TL; DRはクエリを1つずつ実行します。問題がはるかに簡単に見つかり、パフォーマンスのメリットよりも優れています。
混乱のため残念ですが、** SQL全体が1行に**あっても構文エラーが表示されます。バックスラッシュではありません。問題は、更新の回数を順番に実行する必要があることですが、更新回数が一定ではないため、クエリごとにコールバックを使用して個別のクエリで行うことはできません。すべてのクエリがいつ完了するかを知る必要があります。 – Maxim
_ "Node.js/Javascriptでは文字列が\文字" _ "を使用して複数の行にまたがることはできません。 [Hmm?](https://davidwalsh.name/multiline-javascript-strings)。 – robertklep
@robertklep Hmmm?確かに。私は今日何か新しいことを学んだ。ありがとう!私は私の答えを更新します。 – Kryten
https://github.com/mysqljs/mysql#multiple-statement-queries – robertklep
@robertklepありがとう!それが問題を解決しました – Maxim