1. ホーム
  2. mysql

[解決済み] データベースのフィールドを1つインクリメントする

2022-04-22 22:08:15

質問

MySQLで、例えばログインのフィールドがある場合、SQLコマンドでそのフィールドを1ずつ更新するにはどうすればよいでしょうか?

firstName、lastName、loginsを作成するINSERTクエリを作成しようとしています。 しかし、firstNameとlastNameの組み合わせがすでに存在する場合、loginsを1だけ増加させます。

ということで、テーブルは次のようになります。

firstName----|----lastName----|----logins

John               Jones             1
Steve              Smith             3

私は、実行時に新しい人(例えば、Tom Rogers)を挿入するか、またはJohn Jonesが使用される名前である場合にログインを増加させるコマンドを考えています。

どのように解決するのですか?

エントリーを更新しています。

単純なインクリメントで済むはずです。

UPDATE mytable 
  SET logins = logins + 1 
  WHERE id = 12

新しい行を挿入するか、既に存在する場合は更新します。

既に存在する行を更新したい場合、またはまだ存在しない行を挿入したい場合は REPLACE 構文 または INSERT...ON DUPLICATE KEY UPDATE オプション(As ロブ・ヴァン・ダム で実証されました。 彼の答え ).

新しいエントリーを挿入する。

あるいは、次のようなものを探しているのかもしれません。 INSERT...MAX(logins)+1 ? 基本的には、以下のようなクエリを実行することになりますが、特定のニーズによっては、もう少し複雑になるかもしれません。

INSERT into mytable (logins) 
  SELECT max(logins) + 1 
  FROM mytable