LINEで現役エンジニアに直接質問してみよう!登録無料

MySQLでテーブルのレコード(データ)を更新する(UPDATE)

テーブルのレコード(データ)を更新するには「UPDATE」コマンドを使います。

mysql> UPDATE users SET password = 'new password' WHERE id = 2;
Query OK, 1 row affected (0.01 sec)
Rows matched: 1  Changed: 1  Warnings: 0
MEMO

レコードとは、テーブルの行方向のデータの事です。詳しくは下記記事で解説しています。

MySQLのデータベース用語をまとめて解説!テーブル/カラム/レコード/フィールド

UPDATEの基本

下記コマンドでレコードを更新します。

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

条件とは、「id = 2(idがが2だったら)」「email = '[email protected]'(emailが[email protected]だったら)」などのレコードを特定する文字列のことです。

また、「条件」のことを別名「条件式」と言ったりもします。

UPDATEを実行してみる

レコードを追加するには、事前に下記の4操作を実行してテーブルを作成しておく必要があります。

CREATE DATABASE sampleapp_development;
USE sampleapp_development;
CREATE TABLE users (id INT, email VARCHAR(255), password VARCHAR(255));
INSERT INTO users (id, email, password) VALUES
(1, '[email protected]', '[email protected]'),
(2, '[email protected]', '[email protected]'),
(3, '[email protected]', 'hoge'),
(4, '[email protected]', 'fuga');

それでは、テーブルからレコードを更新してみましょう!

まず、更新前のデータを見てみましょう!後で、更新後のデータと比較します。

mysql> SELECT * FROM users;
+------+---------------------+----------+
| id   | email               | password |
+------+---------------------+----------+
|    1 | [email protected] | [email protected] |
|    2 | [email protected]  | [email protected] |
|    3 | [email protected]   | hoge     |
|    4 | [email protected]  | fuga     |
+------+---------------------+----------+
4 rows in set (0.00 sec)

次に、id = 2のデータを更新してみます。

UPDATE users SET password = 'new password' WHERE id = 2;

もう一度データを確認してみると、たしかにid = 2passwordカラムが書き換わっていますね!

mysql> SELECT * FROM users;
+------+---------------------+--------------+
| id   | email               | password     |
+------+---------------------+--------------+
|    1 | [email protected] | [email protected]     |
|    2 | [email protected]  | new password |
|    3 | [email protected]   | hoge         |
|    4 | [email protected]  | fuga         |
+------+---------------------+--------------+
4 rows in set (0.00 sec)

ここまでが「UPDATE」の基本です。

この後は、条件にあったレコードを一括して更新する方法や、レコードを一括して全更新する方法など、深い知識を解説していきます。

条件にあったレコードを一括して更新する方法

条件にあったレコードを一括して更新するには、WHEREの条件を変更します。

先程は=(イコール)を使ってidが2の場合のみのレコードを更新しましたが、>=(数学的には。SQLだと>=のように書く)のような不等式を使うことが出来ます。

IDが3以上のデータを一括更新する

idが3以上のデータに対して、passwordnew hoge passwordに更新するには、下記のようなSQLを使います。

UPDATE users SET password = 'new hoge password' WHERE id >= 3;

データを確認すると、確かにidが3以上のデータが書き換わっています。

mysql> SELECT * FROM users;
+------+---------------------+-------------------+
| id   | email               | password          |
+------+---------------------+-------------------+
|    1 | [email protected] | [email protected]          |
|    2 | [email protected]  | [email protected]          |
|    3 | [email protected]   | new hoge password |
|    4 | [email protected]  | new hoge password |
+------+---------------------+-------------------+
4 rows in set (0.00 sec)

レコードを一括して全更新する方法

レコードを一括して全更新したい場合、WHEREで条件を書きません。

例えば、下記のように書くと、データが一括して更新されます。

mysql> UPDATE users SET password = 'new hoge password';
Query OK, 2 rows affected (0.01 sec)
Rows matched: 4  Changed: 2  Warnings: 0

実行すると、下記のようにデータが全て書き変わっています。

mysql> SELECT * FROM users;
+------+---------------------+-------------------+
| id   | email               | password          |
+------+---------------------+-------------------+
|    1 | [email protected] | new hoge password |
|    2 | [email protected]  | new hoge password |
|    3 | [email protected]   | new hoge password |
|    4 | [email protected]  | new hoge password |
+------+---------------------+-------------------+
4 rows in set (0.00 sec)

このように、間違って実行すると簡単にデータが壊れてしまうので、取り扱いには注意しましょう!

注意

条件式を書かないという簡単さから、間違って実行してしまうこともあります。
削除した後はデータの復旧は出来ないので、SQLコマンドを実行する際は慎重に作業しましょう!

一度、「SELECT + WHERE」で実行結果を確認した後、UPDATE作業に移ると間違いを少なく出来ます。

まとめ

  • データを更新するにはUPDATE テーブル名 SET カラム名1 = カラム値1, カラム名2 = カラム値2, ... WHERE 条件;を使います。
  • 条件とは、id = 2などレコードを特定するものです
  • 条件には=(イコール)の他に<=(小なりイコール)や>=(大なりイコール)などを使うことができます
  • レコードを一括更新するにはWHERE 条件をつけません
  • レコードの一括更新は間違えやすいので注意しましょう!

以上、テーブルのレコード更新方法をアキ(@hackablejp)が解説しました!

この記事を書いた人

自身がプログラミングを独学で勉強し始めて躓いた経験を元に、これから勉強をする人に向けに「イラスト多めでわかりやすい記事」にこだわって情報を発信しています。

現在はフルスタックエンジニアとしてサービス開発などのお仕事をしています。