C#で次のSQLクエリがあります
REPLACE INTO users(uid, username, firstseen, ...)
VALUES(@uid, @username, @firstseen, ...)
ユーザー レコードを更新しようとしていますが、このユーザーを初めて見たとき以外は firstseen を変更したくありません。データベースにクエリを実行できますが、それにより多くのオーバーヘッドが追加されますが、それを行うためのより良い方法はありますか?
REPLACE INTO
は、すでに存在するすべてのデータを踏みにじり、ステートメントDELETE
が続くのと同じです。INSERT
あなたが望むかもしれないものは次のとおりです:
INSERT IGNORE INTO users (uid, username, screenname, ...)
VALUES (@...)
ON DUPLICATE KEY UPDATE uid=VALUES(uid), username=VALUES(username), ...
ON DUPLICATE KEY
明らかに同じものを省略して、必要に応じてセクション内の特定のフィールドを割り当てることができます。