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

MySQLのUPDATE文でSET句に行の既存の値を使って新しい値を設定する方法

MySQLのUPDATEステートメントでは、WHERE句の条件に一致した行に対して、SET句の中でその行の既存の値を参照し、それを基に新しい値を設定することができます。これにより、現在の値を使った計算結果で列を更新できます。以下に具体例を示します。

使用例

まず、次のような「tender」テーブルが存在すると仮定します。

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列の値を100増やすと同時に、更新後の新しいtender_idの値に基づいてrate列も更新しています。

mysql> UPDATE tender SET tender_id = tender_id + 100, rate = tender_id + 500 Where tender_id > 300;
Query OK, 3 rows affected (0.06 sec)
Rows matched: 3 Changed: 3 Warnings: 0

mysql> Select * from tender;
+-----------+----------+------+
| tender_id | company  | rate |
+-----------+----------+------+
| 200       | ABC      | 1000 |
| 300       | ABD      | 6000 |
| 401       | ABE      | 901  |
| 402       | ABF      | 902  |
| 403       | ABG      | 903  |
+-----------+----------+------+
5 rows in set (0.00 sec)

結果のポイント

実行結果を見ると、WHERE句の条件「tender_id > 300」に一致した3行(tender_idが301・302・303の行)だけが更新され、tender_idがそれぞれ401・402・403に変わっていることがわかります。条件に一致しない行(tender_idが200と300の行)は元のままです。

ここで注目したいのはrate列の値です。たとえば元のtender_idが301だった行のrateは「901」になっています。これは、更新後のtender_id「401」に500を加えた値です。MySQLはSET句の代入を左から右へ順番に処理するため、先にtender_idが更新され、その後のrateの計算では新しいtender_idの値が使われるのです。

もし記述順序を逆にして「rate = tender_id + 500」を先に書いた場合、rateの計算には更新前の古いtender_idの値が使われます。このように、SET句内での列の記述順序によって結果が変わるため、意図した動作を実現するには代入の順序に注意してクエリを組み立てることが重要です。

  1. MySQLビューの値を更新する方法|UPDATEステートメントの使い方を実例付きで解説

    MySQLでは、UPDATEステートメントを使用してテーブル内の値を更新できますが、実はビュー(VIEW)に対しても同様にUPDATEステートメントで値を更新できます。構文はテーブルの場合とまったく同じで、異なるのはテーブル名を指定する箇所にビュー名を指定するという点だけです。 サンプルデータの確認 ここでは、「Info」という名前のビューから以下のデータを取得し、実際にどのように値が更新されるのかを確認していきます。 mysql> Select * from Info; +------+---------+------------+ | Id | Name | Subje

  2. 【MySQL】ブール値(BOOLEAN)をUPDATE文で更新する方法を実例付きで解説

    MySQLでは、UPDATEコマンドを使ってブール値を簡単に更新できます。BOOLEANデータ型を定義しても、MySQLは内部的にtinyint(1)へ変換して扱う点に注意が必要です。また、trueやfalseといったリテラルも使用でき、trueは「1」、falseは「0」としてtinyint(1)に格納されます。 ブール値を更新する基本構文 ブール値の更新には、通常のUPDATE文と同じ構文を使用します。 UPDATE yourTableName SET yourColumnName = yourValue WHERE yourCondition; サンプルテーブルの作成 それでは、実際にテ