与えられた:
customer[id BIGINT AUTO_INCREMENT PRIMARY KEY, email VARCHAR(30), count INT]
以下をアトミックに実行したいと思います: 顧客が既に存在する場合は更新します。それ以外の場合は、新しい顧客を挿入します。
理論的には、これはSQL-MERGEに完全に適合するように思えますが、私が使用しているデータベースはAUTO_INCREMENT 列を使用した MERGE をサポートしていません。
https://stackoverflow.com/a/1727788/14731は、存在しない行に対してクエリまたは更新ステートメントを実行すると、データベースがインデックスをロックして同時挿入を防止することを示しているようです。
この動作は SQL 標準で保証されていますか? このように動作しないデータベースはありますか?
更新: 申し訳ありませんが、これについては以前に言及する必要がありました: 解決策は、それが不可能でない限り、READ_COMMITTED トランザクション分離を使用する必要があります。その場合、SERIALIZABLE の使用を受け入れます。