MySQLでデータを更新する方法!(UPDATE)

MySQL MySQL

MySQLでテーブルに格納したデータを更新する方法について書いています。
テーブルのデータを更新するにはUPDATEを使うと良いです。

MySQLのバージョン8.0.32で、動作を検証しています。

UPDATEで更新する方法

UPDATE文を書くと、テーブルのデータを更新することができます。
例えばusersというテーブルに、下記のようにデータが入っています。

id name age birthday
1 taro 25 1998-01-01
2 jiro 23 2000-01-01
3 hanako 26 1997-01-01

そのときに年齢(age)のカラムを更新するには、下記のようにSQLを書きます。

UPDATE users SET age = 100;

usersテーブルの年齢(age)を100歳に更新しています。
実際に実行すると、下記のように適用されました。

mysql> UPDATE users SET age = 100;
Query OK, 3 rows affected (0.00 sec)
Rows matched: 3  Changed: 3  Warnings: 0

データを確認してみると、下記のように全てのデータが更新されました。

mysql> SELECT * FROM users;
+----+--------+------+------------+
| id | name   | age  | birthday   |
+----+--------+------+------------+
|  1 | taro   |  100 | 1998-01-01 |
|  2 | jiro   |  100 | 2000-01-01 |
|  3 | hanako |  100 | 1997-01-01 |
+----+--------+------+------------+
3 rows in set (0.00 sec)

特にWHEREで条件が指定されていない場合は、このように全てのデータが更新されてしまいます。
なので、特定のデータを更新したいときには、WHEREをつけるようにしましょう。

条件(WHERE)をつけて更新する

次はWHEREをつけて、更新行を指定してデータ更新してみます。
先ほどのusersテーブルの2行目(id = 2)を更新してみます。

このときには、下記のようにSQLを書きます。

UPDATE users SET age = 23 WHERE id = 2;

実行すると、下記のようにidの値が「2」の行だけが更新されます。

mysql> UPDATE users SET age = 23 WHERE id = 2;
Query OK, 1 row affected (0.00 sec)
Rows matched: 1  Changed: 1  Warnings: 0

確認してみると、このように2行目の年齢(age)だけが更新されました。

mysql> SELECT * FROM users;
+----+--------+------+------------+
| id | name   | age  | birthday   |
+----+--------+------+------------+
|  1 | taro   |  100 | 1998-01-01 |
|  2 | jiro   |   23 | 2000-01-01 |
|  3 | hanako |  100 | 1997-01-01 |
+----+--------+------+------------+
3 rows in set (0.00 sec)

このようにWHEREを使って、条件をつけると指定した行だけが更新されます。

複数のカラムを更新する

複数のカラムを更新するには、SETを書いた後に複数のカラムに値を設定します。
先ほどのusersテーブルの1番目のデータの名前(name)と年齢(age)を更新してみます。

UPDATE users SET name = 'yasuaki', age = 25 WHERE id = 1;

名前(name)に「yasuaki」を設定して、年齢(age)に「25」を設定しています。
このようにSETの後に、複数のカラムと値の設定をカンマで区切って書きます。

実行すると、下記のように適用されました。

mysql> UPDATE users SET name = 'yasuaki', age = 25 WHERE id = 1;
Query OK, 1 row affected (0.00 sec)
Rows matched: 1  Changed: 1  Warnings: 0

データを確認すると、下記のようにデータが更新されました。

mysql> SELECT * FROM users;
+----+---------+------+------------+
| id | name    | age  | birthday   |
+----+---------+------+------------+
|  1 | yasuaki |   25 | 1998-01-01 |
|  2 | jiro    |   23 | 2000-01-01 |
|  3 | hanako  |  100 | 1997-01-01 |
+----+---------+------+------------+
3 rows in set (0.00 sec)

UPDATE文を日本語でまとめる

UPDATE文を日本語でまとめます。
テーブルのカラムを全て更新するときには、下記のように更新しました。

UPDATE テーブル名 SET カラム = 値;

更新する行を絞るときには、下記のようにSETで値を設定した後に、WHEREを書きました。

UPDATE テーブル名 SET カラム = 値 WHERE 条件文;

複数更新するときには、複数のカラムと値を並べました。

UPDATE テーブル名 SET カラム1 = 値1, カラム2 = 値2 WHERE 条件文;

ORDERで並べた順で更新する

ORDERとLIMITを使うことで、ORDERで並んだ順のn番目までの値を更新することができます。
例えば、fruitsというテーブルに下記のようにデータが入っているときです。

id name price
1 banana 150
2 apple 120
3 melon 300
4 grape 400
5 orange 130

価格(price)の昇順に並べて、上から2つだけを更新してみます。
昇順に並べると、appleとorangeが一番低いので、先頭に並びますね。

この2つのデータを更新するには、下記のようにUPDATE文を書くことができます。

UPDATE fruits SET price = 999 ORDER BY price LIMIT 2;

ORDER BYで価格(price)の昇順に並べた後に、2件だけ取得して、価格に対して「999」を設定しました。
実行すると、下記のように2行に適用されました。

mysql> UPDATE fruits SET price = 999 ORDER BY price LIMIT 2;
Query OK, 2 rows affected (0.00 sec)
Rows matched: 2  Changed: 2  Warnings: 0

データを確認すると、価格(price)が一番低かったappleとorangeの行が更新されました。

mysql> select * from fruits;
+----+--------+-------+
| id | name   | price |
+----+--------+-------+
|  1 | banana |   150 |
|  2 | apple  |   999 |
|  3 | melon  |   300 |
|  4 | grape  |   400 |
|  5 | orange |   999 |
+----+--------+-------+
5 rows in set (0.00 sec)

MySQLでデータを更新する方法まとめ

今回はMySQLでデータを更新する方法について書きました。
記事の内容をまとめると、下記のようになります。

・「`UPDATE テーブル名 SET カラム = 値`」で指定したテーブルのカラムの全ての値が更新された。
・特定の行だけを更新するときには`UPDATE`と一緒に、`WHERE`を使った。
・複数のカラムを更新するときには、`SET`の後にカラムと値をカンマ区切りで複数定義した。
・ORDERとLIMITを使って、テーブルのデータを並べた順のn番目までを更新することができた。

コメント

タイトルとURLをコピーしました