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

MySQL では UPDATE 文を使用することでテーブルに格納されているデータを新しい値に更新することができます。ここでは MySQL でデータを更新する方法について解説します。 LIMIT 句を使って更新するデータの件数を制限する方法、および ORDER BY句を使って指定の方法でデータを並べ替えてから更新する方法もあわせて解説します。

(Last modified: )

データを更新する

テーブルに格納されているデータを更新するには UPDATE 文を使います。書式は次の通りです。

UPDATE table_reference
    SET col_name1 = value1 [, col_name2 = value2, ...]
    [WHERE where_condition]

指定したテーブル名( table_reference )に格納されているデータの中で、指定したカラム名( col_name )の値を value に更新します。 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 にした値を同じカラムに格納しています。このように対象のデータのカラムの値をカラム名を記述することで参照することができます。

-- --

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

create table product(name varchar(10), price int, stock int);

データを更新する(1)

テーブルには次のようなデータを追加しました。

insert into product values ('Orange', 200, 12);
insert into product values ('Melon', 450, 6);
insert into product values ('Grape', 320, 8);
insert into product values ('Apple', 180, 14);
insert into product values ('Peach', 380, 5);

データを更新する(2)

現在テーブルに格納されているデータを取得して確認しておきます。

データを更新する(3)

ではテーブルのデータを更新してみます。最初に name カラムの値が 'Grape' のデータについて price カラムの値を 320 から 340 に更新します。次のように実行してください。

update product set price=340 where name='Grape';

データを更新する(4)

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

データを更新する(5)

name カラムの値が 'Grape' のデータの price カラムの値が 340 に更新されていることが確認できました。

-- --

次に stock カラムの値が 10 よりも少ないデータについて price カラムの値を 50 減少してみます。次のように実行してください。

update product set price=price-50 where stock < 10;

データを更新する(6)

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

データを更新する(7)

stock カラムの値が 10 よりも少ないデータについて price カラムの値が 50 減っていることが確認できました。

-- --

最後にすべてのデータについて stock カラムの値を 0 にします。次のように実行してください。

update product set stock=0;

データを更新する(8)

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

データを更新する(9)

テーブルのすべてのデータについて stock カラムの値が 0 になっていることが確認できました。

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

UPDATE 文ではテーブルに格納されているすべてのデータか、 WHERE 句を設定した場合は条件に一致したすべてのデータを対象に更新を行いますが、一度の UPDATE 文で更新するデータの数を LIMIT 句を使って指定することができます。次のような書式を使います。

UPDATE table_reference
    SET col_name1 = value1 [, col_name2 = value2, ...]
    [WHERE where_condition]
    LIMIT row_count

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

このあとで解説する ORDER BY 句と合わせて実際に試してみます。

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

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

UPDATE table_reference
    SET col_name1 = value1 [, col_name2 = value2, ...]
    [WHERE where_condition]
    ORDER BY col_name [ASC | DESC]

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

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

-- --

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

create table product(name varchar(10), price int, stock int);

LIMIT句およびORDER BY句を使った更新(1)

テーブルには次のようなデータを追加しました。

insert into product values ('Orange', 200, 12);
insert into product values ('Melon', 450, 6);
insert into product values ('Grape', 320, 8);
insert into product values ('Apple', 180, 14);
insert into product values ('Peach', 380, 5);

LIMIT句およびORDER BY句を使った更新(2)

現在テーブルに格納されているデータを取得して確認しておきます。

LIMIT句およびORDER BY句を使った更新(3)

ではテーブルのデータを更新してみます。テーブルを stock カラムの値を対象に降順に並べ替えたうえで price カラムの値を元の値の 1/2 にします。更新するデータの上限は 3 件です。次のように実行してください。

update product set price=price/2 order by stock desc limit 3;

LIMIT句およびORDER BY句を使った更新(4)

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

LIMIT句およびORDER BY句を使った更新(5)

stock カラムの値が大きいものから順に 3 件のデータについて price カラムの値が元の値の 1/2 に更新されていることが確認できました。

-- --

UPDATE 文を使ってデータの更新を行う方法について解説しました。

( Written by Tatsuo Ikura )

Profile
profile_img

著者 / TATSUO IKURA

プログラミングや開発環境構築の解説サイトを運営しています。