データを更新する(UPDATE文)

テーブルに追加済みのデータに対して、新しい値に更新するには UPDATE 文を使用します。ここでは MariaDB でテーブルに追加済みのデータを新しい値に更新する方法について解説します。

(Last modified: )

データを更新する

テーブルに追加済みのデータを更新するには UPDATE 文を使用します。書式は次のとおりです。

UPDATE [LOW_PRIORITY] [IGNORE] table_reference 
  [PARTITION (partition_list)]
  SET col1={expr1|DEFAULT} [,col2={expr2|DEFAULT}] ...
  [WHERE where_condition]
  [ORDER BY ...]
  [LIMIT row_count]

基本的な使い方としては WHERE 句を使って更新する対象のデータを指定し、データの中の対象のカラムとそのカラムに設定する新しい値を指定します。

UPDATE table_reference 
  SET col1=value1 [,col2=value2, ...]
  WHERE where_condition

指定したテーブル名( table_reference )に格納されているデータの中で、指定したカラム名( col1 )の値を value1 に更新します。 WHERE 句を指定しなければテーブルに格納されているすべてのデータが更新されます。特定のデータのカラムの値だけを更新したい場合は WHERE 句を指定してください。

カラムに設定する新しい値には、数値や文字列の値の他に関数や式などを設定できます。

[例] id カラムの値が 10 のデータの price カラムの値を 1000 に設定する
UPDATE mytbl SET price=1000 WHERE id=10;

[例] count カラムの値が 100 より小さいデータの price カラムの値を 1/2 に設定する
UPDATE mytbl SET price=price/2 WHERE count < 100;

[例]全てのデータの count カラムと price カラムの値を 0 に設定する
UPDATE mytbl SET count=0, price=0;

上記の 2 番目の例では price = price / 2 のように新しい値として price / 2 という式を指定しています。これは price カラムに格納されている現在の値を取り出し、 1/2 にした値を同じカラムに格納しています。このように対象のデータのカラムの値をカラム名を記述することで参照することができます。

それでは実際に試してみます。次のようなテーブルを作成しました。そしてデータを 3 つ追加しました。

create table user (name varchar(10), age int);

insert into user values('Nishi', 30),('Oota', 19),('Suzuki', 24);

データを更新する(1)

user テーブルには 3 つのデータが格納されています。

select * from user;

データを更新する(2)

それでは name カラムの値が 'Oota' のデータの age カラムの値を 18 に変更します。次のように実行してください。

update user set age=18 where name='Oota';

データを更新する(3)

対象のデータの更新が完了しました。それでは確認のためにあらためて user テーブルのデータを取得してみます。

データを更新する(4)

対象のデータの age カラムの値が 19 から 18 に更新されていることが確認できました。

今度はテーブルに含まれるすべてのデータを対象に、 age カラムの値を現在格納されている値に 1 を加えた値に更新します。次のように実行してください。

update user set age=age+1;

データを更新する(5)

すべてのデータの更新が完了しました。それでは確認のためにあらためて user テーブルのデータを取得してみます。

データを更新する(6)

すべてのデータの age カラムの値が元々格納されていた値に 1 を加えた値で更新されていることが確認できました。

更新するデータの数を指定する(LIMIT句)

UPDATE 文でデータの更新を行うとき、、一度の UPDATE 文で更新するデータの数を LIMIT 句を使って指定することができます。次のような書式を使います。

UPDATE table_reference 
  SET col1=value1 [,col2=value2, ...]
  WHERE where_condition
  LIMIT row_count

LIMIT のあとに一度に更新するデータ数の上限を記述します。たとえば上限を 3 に設定した場合、更新の対象となるデータが何件あったとしても、先頭から順に最大 3 件のデータだけが更新されます。

それでは実際に試してみます。今回例として product というテーブルを作成しました。現在 product テーブルには次のようなデータが格納されています。

更新するデータの数を指定する(LIMIT句)(1)

最初に更新するデータの数を制限せずに UPDATE 文を実行してみます。 product テーブルに含まれるすべてのデータを対象に price カラムの値を 100 減らすように更新します。次のように実行してください。

update product set price=price-100;

更新するデータの数を指定する(LIMIT句)(2)

更新後の product テーブルのデータを確認します。

更新するデータの数を指定する(LIMIT句)(3)

すべてのデータの price カラムの値が 100 減少しました。

次に更新されるデータの数を制限してみます。 product テーブルに含まれるすべてのデータを対象に price カラムの値を 100 減らすように更新します。ただし更新されるデータの数は最大で 3 つとします。次のように実行してください。

update product set price=price-100 limit 3;

更新するデータの数を指定する(LIMIT句)(4)

更新後の product テーブルのデータを確認します。

更新するデータの数を指定する(LIMIT句)(5)

今回は対象のデータが 5 つありましたので、最大の 3 つのデータについて price カラムの値が 100 減少しました。このように LIMIT 句を設定することで UPDATE 文によって更新されるデータの数の最大数を設定することができます。

降順または昇順に並び替えてから更新する(ORDER BY句)

UPDATE 文でデータを更新するときに、指定したカラムの値を基準に昇順または降順に並び替えた後でデータを更新することができます。次のような書式を使います。

UPDATE table_reference 
  SET col1=value1 [,col2=value2, ...]
  WHERE where_condition
  ORDER BY ...

ORDER BY のあとに記述となるカラム名を指定します。並べ替える方法は ASC を指定した場合は昇順、 DESC を指定した場合は降順で並べ替えを行います。省略した場合は昇順です。

※ あくまで更新を行う時に並べ替えを行うだけで、実際に格納されているデータを並べ替えて格納するわけではありません。

それでは実際に試してみます。今回例として product というテーブルを作成しました。現在 product テーブルには次のようなデータが格納されています。

降順または昇順に並び替えてから更新する(ORDER BY句)(1)

product テーブルに含まれるすべてのデータの中で最大 3 つのデータを対象に price カラムの値を 100 減らすように更新します。この時 price カラムの値を対象として昇順に並び替えた上で更新します。次のように実行してください。

update product set price=price-100 order by price asc limit 3;

降順または昇順に並び替えてから更新する(ORDER BY句)(2)

更新後の product テーブルのデータを確認します。

降順または昇順に並び替えてから更新する(ORDER BY句)(3)

product テーブルのデータの中で、 price カラムの値が小さいものから順に 3 つのデータに対して更新を行い、それぞれ price カラムの値が 100 減少していることが確認できました。データそのものが並べ替えられているわけではない点も注意してください。

今度は product テーブルに含まれるすべてのデータの中で最大 3 つのデータを対象に price カラムの値を 500 増やすように更新します。この時 price カラムの値を対象として降順に並び替えた上で更新します。次のように実行してください。

update product set price=price+500 order by price desc limit 3;

降順または昇順に並び替えてから更新する(ORDER BY句)(4)

更新後の product テーブルのデータを確認します。

降順または昇順に並び替えてから更新する(ORDER BY句)(5)

product テーブルのデータの中で、 price カラムの値が大きいものから順に 3 つのデータに対して更新を行い、それぞれ price カラムの値が 500 増加していることが確認できました。

-- --

MariaDB でテーブルに追加済みのデータを新しい値に更新する方法について解説しました。

( Written by Tatsuo Ikura )

プロフィール画像

著者 / TATSUO IKURA

これから IT 関連の知識を学ばれる方を対象に、色々な言語でのプログラミング方法や関連する技術、開発環境構築などに関する解説サイトを運営しています。