MySQL
 Computer >> コンピューター >  >> プログラミング >> MySQL

MySQLのUPDATE文ひとつで複数行の列値をまとめて更新する方法

MySQLのUPDATE文で複数行を更新する仕組み

MySQLでは、UPDATEステートメントのWHERE句に指定した条件が複数の行に一致した場合、SET句の内容がその一致したすべての行に対して適用されます。つまり、単一のUPDATE文を実行するだけで、複数行の列値を一度に更新することが可能です。

サンプルテーブルの準備

ここでは、次のような「tender」というテーブルを使って具体的に見ていきましょう。

mysql> Select * from tender;

+-----------+---------+------+
| tender_id | company | rate |
+-----------+---------+------+
| 200       | ABC     | 1000 |
| 300       | ABD     | 5000 |
| 301       | ABE     | 6000 |
| 302       | ABF     | 2500 |
| 303       | ABG     | 2600 |
+-----------+---------+------+

5 rows in set (0.00 sec)

複数行を更新するUPDATE文の実行例

たとえば、「tender_id」が300以上の行を対象に「rate」列の値を更新したい場合は、次のようなクエリを実行します。

mysql> UPDATE tender SET rate = rate + 1000 WHERE tender_id >= 300;
Query OK, 4 rows affected (0.07 sec)
Rows matched: 4 Changed: 4 Warnings: 0

このクエリでは、既存のrate値に1000を加算しています。WHERE句の条件(tender_id >= 300)に該当するのは4行であるため、実行結果のメッセージにも「4 rows affected」と表示されているように、その4行すべてが一度に更新されました。

更新後のテーブルを確認する

続いて、実際にテーブルの中身がどう変わったのかを確認してみましょう。

mysql> Select * from tender;

+-----------+---------+------+
| tender_id | company | rate |
+-----------+---------+------+
| 200       | ABC     | 1000 |
| 300       | ABD     | 6000 |
| 301       | ABE     | 7000 |
| 302       | ABF     | 3500 |
| 303       | ABG     | 3600 |
+-----------+---------+------+

5 rows in set (0.00 sec)

上記の結果セットを見ると、tender_idが300以上の複数行の「rate」値が、それぞれ1000ずつ加算されて更新されていることがわかります。一方、条件に合致しないtender_id = 200の行は元の値(1000)のまま維持されています。

実務での注意点

WHERE句を省略してUPDATE文を実行すると、テーブル内の全行が更新対象になってしまいます。意図しないデータ変更を防ぐためにも、必ず適切な条件を指定すること、そして本番環境で実行する前にSELECT文で対象行を事前に確認しておくことが重要です。

  1. MySQLの1つのUPDATE文で2つの列を同時に更新する方法

    はじめにMySQLでは、1つのUPDATE文の中でSET句を一度だけ使えば、複数の列を同時に更新できます。各列の指定はカンマ(,)で区切って記述します。この記事では、実際にテーブルを作成し、1つのクエリで2つの列(FirstNameとLastName)を更新する手順を解説します。サンプルテーブルの作成まず、以下のようにCREATE TABLE文でテーブルを作成します。mysql> create table DemoTable1909 ( Id int NOT NULL, FirstName varchar(20), LastName varchar(20)

  2. MySQLで1つのINSERT文を使って列に複数の値を一括挿入する方法

    はじめにMySQLでは、1つのINSERT文を繰り返し実行しなくても、単一のクエリだけで同じ列に複数の値を挿入できます。VALUES句の後ろに、挿入したい値をカンマ区切りのタプル(行)として列挙するだけです。この方法はデータベースへの接続回数を減らせるため、大量のデータを登録する際にパフォーマンス面でも大きなメリットがあります。基本構文複数の値を1つの列に挿入する場合の基本構文は以下のとおりです。INSERT INTO テーブル名 VALUES(値1),(値2),...,(値N);このように、各値を丸括弧で囲み、カンマ(,)で区切って並べることで、1回のクエリで複数行をまとめて挿入できます。実