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`と一緒に、`WHERE`を使った。
・複数のカラムを更新するときには、`SET`の後にカラムと値をカンマ区切りで複数定義した。
・ORDERとLIMITを使って、テーブルのデータを並べた順のn番目までを更新することができた。
コメント