MySQLのUPDATE文でIF条件を使う方法をわかりやすく解説
MySQLでは、IF()関数を組み合わせることで、UPDATE実行時に条件分岐を行うことができます。特定の値に一致するレコードだけを別の値へ更新し、それ以外は元の値のまま維持したい場合に非常に便利なテクニックです。
基本構文
MySQLでIF条件を使用してUPDATEを実行する際の基本構文は以下の通りです。
update yourTableName set yourColumnName = if(yourColumnName = yourOldValue, yourNewValue, yourColumnName);
この構文のポイントは、IF(条件, 真の場合の値, 偽の場合の値)という三項演算子のような動作にあります。カラムの現在値が指定した旧値と一致すれば新値に更新され、一致しなければ自分自身(yourColumnName)が代入されるため、結果的に値は変わりません。
サンプルテーブルの作成
それでは、実際に動作を確認するためにテーブルを作成してみましょう。テーブル作成用のクエリは次の通りです。
mysql> create table updateIfConditionDemo
-> (
-> UserId int NOT NULL AUTO_INCREMENT PRIMARY KEY,
-> UserName varchar(20),
-> UserAge int
-> );
Query OK, 0 rows affected (4 min 0.59 sec)テストデータの挿入
続いて、INSERTコマンドを使っていくつかのレコードを挿入します。
mysql> insert into updateIfConditionDemo(UserName,UserAge) values('Larry',23);
Query OK, 1 row affected (0.11 sec)
mysql> insert into updateIfConditionDemo(UserName,UserAge) values('Mike',21);
Query OK, 1 row affected (0.20 sec)
mysql> insert into updateIfConditionDemo(UserName,UserAge) values('Sam',23);
Query OK, 1 row affected (0.15 sec)
mysql> insert into updateIfConditionDemo(UserName,UserAge) values('David',23);
Query OK, 1 row affected (0.14 sec)
mysql> insert into updateIfConditionDemo(UserName,UserAge) values('Maxwell',23);
Query OK, 1 row affected (0.18 sec)挿入したデータの確認
SELECT文ですべてのレコードを表示して、データが正しく登録されているか確認します。
mysql> select *from updateIfConditionDemo;
実行結果は以下の通りです。
+--------+----------+---------+ | UserId | UserName | UserAge | +--------+----------+---------+ | 1 | Larry | 23 | | 2 | Mike | 21 | | 3 | Sam | 23 | | 4 | David | 23 | | 5 | Maxwell | 23 | +--------+----------+---------+ 5 rows in set (0.00 sec)
IF条件を使ったUPDATEの実行
ここで、「年齢が23歳のユーザーだけを26歳に更新する」という処理をIF条件付きのUPDATE文で実行してみます。
mysql> update updateIfConditionDemo set UserAge =if(UserAge =23,26,UserAge); Query OK, 4 rows affected (0.20 sec) Rows matched: 5 Changed: 4 Warnings: 0
実行結果を見ると、「Rows matched: 5(該当行:5件)」「Changed: 4(更新された行:4件)」と表示されています。これは、全5件のうち4件だけが実際に値を変更されたことを意味します。Mikeさんの年齢は21歳なので条件に合致せず、元の値のまま維持されているわけです。
更新後のデータ確認
もう一度テーブルの内容を確認してみましょう。UserAgeが23から26に更新されているはずです。
mysql> select *from updateIfConditionDemo;
実行結果は以下の通りです。
+--------+----------+---------+ | UserId | UserName | UserAge | +--------+----------+---------+ | 1 | Larry | 26 | | 2 | Mike | 21 | | 3 | Sam | 26 | | 4 | David | 26 | | 5 | Maxwell | 26 | +--------+----------+---------+ 5 rows in set (0.00 sec)
まとめ
このように、IF()関数をUPDATE文の中で使えば、WHERE句を使わずとも「条件に一致する行だけを更新する」という処理を1つのクエリで実現できます。特に、複数の条件で異なる値を設定したい場合や、一括更新の際に一部のレコードだけ値を変えたいケースで役立ちます。なお、同様の処理はCASE式でも記述できるため、条件が複雑になる場合はCASE式の利用も検討するとよいでしょう。
-
MySQLのdate()関数で日付を照合し、テーブルの列を更新する方法
MySQLでは、date()関数とcurdate()関数を組み合わせることで、「日付部分だけ」を現在の日付と照合し、該当する行の列を更新できます。datetime型のカラムには時刻情報も含まれていますが、date()関数を使えば時刻を無視して日付のみを比較できるのがポイントです。基本構文date()関数で日付を照合しながら列を更新するための基本的な構文は以下の通りです。update yourTableName set yourColumnName=yourValue where date(yourColumnName)=curdate();サンプルテーブルの作成まず、動作確認用のテーブルを作成
-
ApacheとMySQLを連携させる方法|ユーザー認証とログ管理の基本
ApacheとMySQLの連携とは本記事では、Webサーバー「Apache」とデータベース「MySQL」を組み合わせて活用する方法を解説します。Apacheは、Apache Software Foundationによって開発・保守されているWebサーバーソフトウェアです。ユーザーからWebページへのアクセス要求(リクエスト)を受け付け、いくつかのセキュリティチェックを実施したうえで、目的のページへとユーザーを誘導します。MySQLによるユーザー認証MySQLデータベースを使ってユーザー認証を行えるプログラムは数多く存在します。これらのプログラムを利用すれば、アクセスログをMySQLのテーブルに