1
私は以下のように構築されたSQLクエリがあります:私は、コードを実行すると、私は次のログを取得するNode.js Merge文のmysql構文エラー?
tmpQUERY = "INSERT INTO vertix_users (user_name, user_email, user_pass) " +
"VALUES (" + mysql.escape(userName) +
", " + mysql.escape(userEmail) +
", " + mysql.escape(userPass) + ")";
tmpQUERY = "MERGE vertix_users WITH (HOLDLOCK) AS oldData " +
"USING (VALUES (@user_name, @user_email)) AS newData (" + mysql.escape(userName) + ", " + mysql.escape(userEmail) + ") " +
"ON newData.user_name = oldData.user_name AND newData.user_email = oldData.user_email " +
"WHEN NOT MATCHED BY TARGET THEN " + tmpQUERY;
を:
MERGE vertix_users WITH (HOLDLOCK) AS oldData USING (VALUES (@user_name, @user_email)) AS newData ('asfasfsaff vvv', 'asfasfasfasf') ON newData.user_name = oldData.user_name AND newData.user_email = oldData.user_email WHEN NOT MATCHED BY TARGET THEN INSERT INTO vertix_users (user_name, user_email, user_pass) VALUES ('asfasfsaff vvv', 'asfasfasfasf', 'saqqq')
そして読み込むSQL構文エラー:
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'MERGE vertix_users WITH (HOLDLOCK) AS oldData USING (VALUES (@user_name, @user_e' at line 1]
マージのない簡単なinsert文は正常に動作しますが、そのコードの2番目の部分を追加するとエラーが発生します。
文句を言わないのですか?私がマージソリューションを使ったのは、それを避けるためです。 –
それは単なるMySQLコマンド、別名アトミック操作なので、競合状態が発生するのではないかと疑います。 MySQLでMERGEを使用するオプションはありません。 –
私は重複した鍵の更新を見ました。重複がない場合にのみ挿入を行う方法はわかりません。私は同じ名前のユーザーの挿入を防止しようとしています。 –