テーブルに新規レコードを挿入するのにINSERT INTO文を使うことは既に学びました。それに対して、すでに登録したレコードの内容を修正したい場合にはUPDATE文を使います。
基本構文
UPDATE文の構文
UPDATE テーブル名 SET カラム名1=値1 [, カラム名2=値2 …]
指定したカラムに指定した値をセットします。
この基本構文だとテーブル上のすべてのレコードに同じ値をセットしてしまうため、多くの場合変更対象のレコードを特定するためにWHERE句を組み合わせます。
WHERE句を使う場合の構文
UPDATE テーブル名 SET カラム名1=値1 [, カラム名2=値2 …] WHERE 条件式
WHERE句の条件式には、SELECT文と同じものが使えます。WHERE句の条件に当てはまるレコードが1件もない場合でもエラーにはなりません。どのレコードも値が変更されないだけです。
UPDATE文によってデータを修正するとき、修正前の値はどこにも保存されません。つまり一般のアプリケーションのような『UNDO』機能はありません。よってWHERE句の条件式や修正するデータの値などに間違いが無いように注意する必要があります。
UPDATEの例
UPDATE meibo
SET name='六分儀シンジ', ruby='ロクブンギシンジ'
WHERE id=2;id=2のレコードのname とrubyの値が変化しているのをphpmyadminで確認してみましょう。
練習13-1
テーブル ex_shohin の id=3 のレコードの price の値を170に変更するSQLを記述しなさい。
計算の結果を代入する
UPDATE文でカラムに代入する『値』の部分には、固定の値ではなく計算式を記述することもできます。
代入する値に計算式を使う例
UPDATE meibo
SET height=height+1コンピュータプログラミングの経験の無い人にはheight=height+1 という記述が奇妙に見えるかもしれませんが、この場合の『=』は『左辺と右辺が等しい』という意味ではなく、『右辺の計算結果を左辺で表すカラムに第入』という意味です。
またこの例ではWHERE句を使用していませんので、全レコードが対象となります。
したがって、このSQLを実行すると、全レコードの height が1ずつ増えます。
実行結果

練習13-2
テーブルex_shohinの全レコードのpriceの値を10ずつ増やすSQLを記述しなさい。
代入する値に計算式を使う例2
より複雑な計算式を使うこともできます。
実験のため、テーブルmeibo に以下のカラムを追加して下さい。
| 列名 | データ型 |
|---|---|
| BMI | FLOAT |
次に以下のSQLを実行してみましょう。
UPDATE meibo
SET BMI = ROUND(weight/ POW(height/100 , 2), 1)すべてのレコードについて、heightカラムとweightカラムの値を用いて計算した値をBMIカラムに代入しています。
実行結果

練習13-3
(1)テーブルex_shohin に以下のカラムを追加して下さい。
| 列名 | データ型 |
|---|---|
| tax | INT |
(2)テーブルex_shohin上の全レコードについて、消費税額(priceカラムの値のの8%)を計算し、taxカラムに代入するSQLを記述しなさい。
代入する値に計算式を使う例3
もちろん計算結果の代入の場合も、WHERE句と組み合わせて条件に合ったレコードのみ値を変更することができます。
UPDATE meibo
SET height = height - 10
WHERE id IN (1,3)実行結果


コメント