UPDATE構文
UPDATEは、レコードを更新するための構文で、すべてのレコードを一括更新、もしくは条件式を満たす特定のレコードだけを更新することができます。使い方は、INSERT構文と同様にSET句で更新するフィールドと値を指定します。
UPDATEで特定のレコードのみを更新対象にする場合は、WHERE句に条件式を設定します。 条件に当てはまるレコードが存在しない場合は更新されませんが、文法的に正しいのでエラーにはなりません。
単一テーブル構文
[IGNORE] テーブル名
SET フィールド名=値, [フィールド名=値, ...]
[WHERE 条件式]
[ORDER BY ...]
[LIMIT 値]
複合テーブル構文
UPDATE構文のキーワード
パラメータ | 説明 |
---|---|
LOW_PRIORITY | テーブルを利用するクライアントがなくなるまで待ってから、UPDATEを実行します。 |
WHERE | 条件式にマッチするレコードを選択します。 |
LIMIT | 更新するレコード数を指定します。 |
IGNORE | 通常処理では、レコード更新の際にPRIMARYやUNIQUEと定義されたフィールドで値の重複がある場合、エラーが発生します。IGNOREを宣言しておくと、レコードの更新が行われないのは同じですが、エラーが発生しません。 |
ORDER BY | 指定された順序でレコードを更新します。 |
UPDATE構文の使用例
それでは、UPDATE構文を使って商品テーブルの内容を変更してみましょう。変更する対象は[商品ID(id_g)]の値が"3"のレコード、[商品名(name)]"Saxophone Colussus"です。変更する内容は[商品名(name)]と[価格(price)]です。
商品ID(id_g) | 商品名(name) | 価格(price) |
---|---|---|
3 | Saxophone Colossus | NULL |
特定の1件のレコードを指定する場合は、WHERE句の条件式にプライマリキーとなるフィールド名を指定します。プライマリキーの値は1つのテーブル内でユニークだということが保障されているので、間違えて関係のないレコードも変更してしまうといったミスを避けることができます。商品テーブルのプライマリキーは[商品ID(id_g)]なので、任意のレコードを選択するには、条件式で[商品ID(id_g)]を指定します。
レコードの更新
それでは、UPDATE構文を使ってレコードを更新してみましょう。まず、UPDATEの後に変更したいテーブル名を指定し、SET句で変更するフィールド名と値を指定します。最後に、WHERE句の条件式に変更するレコードのプライマリキーを指定します。
UPDATE goods SET name='Electric Ladyland', price=2100 WHERE id_g=3;
変更内容の確認
UPDATEで更新した内容を、SELECTで確認します。
SELECT * FROM goods WHERE id_g=3; +------+-------------------+-------+ | id_g | name | price | +------+-------------------+-------+ | 3 | Electric Ladyland | 2100 | +------+-------------------+-------+
商品ID(id_g) | 商品名(name) | 価格(price) |
---|---|---|
3 | Electric Ladyland | 2100 |
UPDATE構文で注意したいのが、WHERE句の部分です。WHERE句は省略可能ですが、WHERE句で変更対象のレコードを選択しなかった場合、すべてのレコードが変更されます。UPDATE構文を使う際は十分な注意が必要です。
式を使ったレコードの更新
フィールドを更新する際に、フィールドの値を直接指定する代わりに、式を指定することもできます。たとえば、商品テーブルの[価格(price)]フィールドを税込価格にするには、税込価格を計算してから更新処理をする必要はありません。クエリの中で[価格(price)]フィールドの値に5%をかけて、税込価格を代入します。
UPDATE goods SET price = price * 1.05;
更新前の商品テーブル
商品ID(id_g) | 商品名(name) | 価格(price) |
---|---|---|
1 | Afro-American-Arctic | 2300 |
2 | Ready To Die | 1800 |
3 | Electric Ladyland | 2100 |
~省略~ |
更新後の商品テーブル
商品ID(id_g) | 商品名(name) | 価格(price) |
---|---|---|
1 | Afro-American-Arctic | 2415 |
2 | Ready To Die | 1890 |
3 | Electric Ladyland | 2205 |
~省略~ |
UPDATEは左から右に評価します。たとえば、次のクエリは[商品番号(id_g)]"3"の[価格(price)] フィールドに"3200"を代入し、そのあと1.05倍しています。
UPDATE goods SET price = 3200, price = price * 1.05 WHERE id_g = 3;
更新前の商品テーブル
商品ID(id_g) | 商品名(name) | 価格(price) |
---|---|---|
3 | Electric Ladyland | 2205 |
更新後の商品テーブル
商品ID(id_g) | 商品名(name) | 価格(price) |
---|---|---|
3 | Electric Ladyland | 3360 |
複数のテーブルに対するUPDATE
複数のテーブルに対するUPDATE操作も実行可能です。
UPDATE goods, goods_new SET goods.price=goods_new.price WHERE goods.id_goods=goods_new.id_goods;
上の例では、カンマ演算子を使用した内部結合を示していますが、複数テーブルのUPDATE構文では、LEFT JOINなど、SELECT構文で使用可能な結合型を使用することができます。