MySQLでフィールドの値を1ずつ増やす方法(UPDATE文の使い方を解説)
MySQLでは、UPDATE文を使うことで、既存のレコードのカラム値に1を加算できます。ログイン回数のカウンターやアクセス数の管理など、数値を自動的に増やしたい場面で非常に便利なテクニックです。
基本構文
UPDATE テーブル名 SET カラム名 = カラム名 + 1 WHERE 条件;
ポイントは「SET カラム名 = カラム名 + 1」の部分です。現在の値に対して直接加算処理を行うため、事前に値を読み込む必要がありません。
サンプルテーブルの作成
それでは、実際に動作を確認してみましょう。まずはテスト用のテーブルを作成します。
mysql> create table IncrementBy1
-> (
-> Id int,
-> Name varchar(100),
-> CounterLogin int
-> );
Query OK, 0 rows affected (0.63 sec)この例では、「Id」「Name」「CounterLogin(ログイン回数)」という3つのカラムを持つテーブルを作成しました。
テストデータの挿入
次に、INSERT文を使っていくつかのレコードを挿入します。
mysql> insert into IncrementBy1 values(100,'John',30); Query OK, 1 row affected (0.17 sec) mysql> insert into IncrementBy1 values(101,'Carol',50); Query OK, 1 row affected (0.15 sec) mysql> insert into IncrementBy1 values(102,'Bob',89); Query OK, 1 row affected (0.25 sec) mysql> insert into IncrementBy1 values(103,'Mike',99); Query OK, 1 row affected (0.18 sec) mysql> insert into IncrementBy1 values(104,'Sam',199); Query OK, 1 row affected (0.36 sec) mysql> insert into IncrementBy1 values(105,'Tom',999); Query OK, 1 row affected (0.18 sec)
登録データの確認
SELECT文ですべてのレコードを表示して確認します。
mysql> select * from IncrementBy1;
出力結果
+------+-------+--------------+ | Id | Name | CounterLogin | +------+-------+--------------+ | 100 | John | 30 | | 101 | Carol | 50 | | 102 | Bob | 89 | | 103 | Mike | 99 | | 104 | Sam | 199 | | 105 | Tom | 999 | +------+-------+--------------+ 6 rows in set (0.00 sec)
フィールドの値を1増加させるクエリ
ここからが本題です。Id=105のTomさんのログイン回数を1増やしてみましょう。
mysql> update IncrementBy1
-> set CounterLogin=CounterLogin+1
-> where Id=105;
Query OK, 1 row affected (0.45 sec)
Rows matched: 1 Changed: 1 Warnings: 0このUPDATE文により、WHERE句で指定したId=105のレコードだけが対象となり、CounterLoginの値が999から1増加します。
更新結果の確認
実際に値が更新されたかどうかを確認しましょう。
mysql> select * from IncrementBy1 where Id=105;
出力結果
+------+------+--------------+ | Id | Name | CounterLogin | +------+------+--------------+ | 105 | Tom | 1000 | +------+------+--------------+ 1 row in set (0.00 sec)
CounterLoginの値が999から1000に正しく更新されていることがわかります。
応用:複数行まとめて増加させるには?
WHERE句の条件を変更すれば、一度に複数のレコードを更新することも可能です。
- すべての行を1増やす場合: WHERE句を省略する
UPDATE IncrementBy1 SET CounterLogin = CounterLogin + 1; - 特定条件の行のみ増やす場合: 条件を指定する
UPDATE IncrementBy1 SET CounterLogin = CounterLogin + 1 WHERE CounterLogin >= 50; - 1以外の数値を加算する場合: 数値を変えるだけでOK
UPDATE IncrementBy1 SET CounterLogin = CounterLogin + 10;
注意点
- NULLの扱いに注意: 対象のカラムがNULLの場合、「NULL + 1」はNULLになるため、値は更新されません。
IFNULL(CounterLogin, 0) + 1のように書くと安全です。 - WHERE句の指定忘れ: WHERE句を付け忘れるとテーブル内の全レコードが更新されるため、実行前には必ず条件を確認しましょう。
- トランザクション活用: 重要なデータを扱う場合は、BEGIN〜COMMITで囲んでおくと、誤操作時にROLLBACKで復元できます。
まとめ
MySQLでフィールドの値を1増加させるには、UPDATE文で「SET カラム名 = カラム名 + 1」と記述するだけで実現できます。ログインカウンターの管理など、日常的な開発シーンで頻繁に使われる基本テクニックなので、ぜひマスターしておきましょう。
-
MySQLのORDER BY IF()を使って同じフィールドのソート順を制御する方法
MySQLで、特定の値(例えば99)だけを検索結果の末尾に表示し、その他の値は通常どおり昇順で並べたいケースはよくあります。こうした柔軟なソートを実現するには、ORDER BY句とIF()関数を組み合わせるのが効果的です。本記事では、テーブルの作成からソートクエリの実行まで、手順を追って解説します。 サンプルテーブルの作成 まず、以下のコマンドでテーブルを作成します。 mysql> create table DemoTable801 ( Score int ); Query OK, 0 rows affected (0.69 sec) テストデータの挿入 続いて、INSERT文
-
MySQLでカラム内の値を検索するには?REGEXP_INSTR関数の使い方
MySQLでカラム内の値を検索する方法MySQLでは、REGEXP_INSTR()関数を使うことで、指定したカラムに特定の文字列が含まれているかどうかを正規表現ベースで判定できます。マッチした場合は「1」、マッチしなかった場合は「0」を返すため、WHERE句と組み合わせることで柔軟な部分一致検索が可能になります。基本構文構文は以下の通りです。select *from yourTableName where REGEXP_INSTR(yourColumnName,yourSearchValue);サンプルテーブルの作成上記の構文を理解するために、まずテーブルを作成しましょう。mysql>