続いて既存のレコードを更新する方法について見ていきましょう。

insert文によってテーブルに作成したレコードは update 文で更新できます。
update categories set title = 'PG' where id = 1;
update 文は次のような構文になります。
update テーブル名 set 列名 = データ, ... where 列名 = データ, ...;
先ほどのSQLの場合は更新対象のテーブルを categories テーブルとしています。また set 句には更新対象の列名とデータを = でつないでペアで定義します。また select 文と同様に where 句を使って更新対象となるレコードを決定します。さきほどのSQL文の場合は where 句によって id が 1 のレコードを更新対象として、set 句によって title 列の値を PG に更新しています。
それでは実際にMySQLクライアントプログラムから update 文を実行してみましょう。
MariaDB [eldb]> update categories set title = 'PG' where id = 1;
Query OK, 1 row affected (0.00 sec)
Rows matched: 1 Changed: 1 Warnings: 0
MariaDB [eldb]>
Query OK というメッセージからSQLが正しく処理されたことがわかります。update 文の更新結果を確認するためにもう一度 select 文を実行してみましょう。
MariaDB [eldb]> select * from categories;
+----+-----------+
| id | title |
+----+-----------+
| 1 | PG |
| 2 | Design |
| 3 | Marketing |
+----+-----------+
3 rows in set (0.00 sec)
MariaDB [eldb]>
期待していたとおり id が 1 のレコードの title 列の値が PG に更新されているのがわかります。
複数列を更新する場合
もうひとつ練習してみましょう。set 句は更新対象の列を , カンマで区切って複数定義できます。たとえば次の update 文は id が 1 のレコードの id 列の値を100、title 列の値を Coding に更新します。
update categories set id = 100, title = 'Coding' where id = 1;
MySQLクライアントプログラムから update 文を実行してみましょう。
MariaDB [eldb]> update categories set id = 100, title = 'Coding' where id = 1;
Query OK, 1 row affected (0.00 sec)
Rows matched: 1 Changed: 1 Warnings: 0
MariaDB [eldb]>
Query OK というメッセージからSQLが正しく処理されたことがわかります。update 文の更新結果を確認するためにもう一度 select 文を実行してみましょう。
MariaDB [eldb]> select * from categories;
+-----+-----------+
| id | title |
+-----+-----------+
| 2 | Design |
| 3 | Marketing |
| 100 | Coding |
+-----+-----------+
3 rows in set (0.00 sec)
MariaDB [eldb]>
期待していたとおり id が 1 のレコードの id 列の値が 100 、 title 列の値が Coding に更新されているのがわかります。
where句を指定しない場合
さいごに、あまり一般的な使い方ではないですが where 句を省略した update 文を考えてみましょう。
update categories set title = 'Test';
上記のように where 句を省略して update 文を実行するとテーブル上のすべてのレコードが update 文の対象となります。つまり、categories テーブルのすべてのレコードの title 列の値が Test になります。
MySQLクライアントプログラムから update 文を実行してみましょう。
MariaDB [eldb]> update categories set title = 'Test';
Query OK, 3 rows affected (0.00 sec)
Rows matched: 3 Changed: 3 Warnings: 0
MariaDB [eldb]>
Query OK というメッセージからSQLが正しく処理されたことがわかります。update 文の更新結果を確認するためにもう一度 select 文を実行してみましょう。
MariaDB [eldb]> select * from categories;
+-----+-------+
| id | title |
+-----+-------+
| 2 | Test |
| 3 | Test |
| 100 | Test |
+-----+-------+
3 rows in set (0.00 sec)
MariaDB [eldb]>
実行結果のようにすべてのレコードの title 列の値が Test で更新されているのがわかります。このように where 句を記述し忘れると更新の影響範囲がテーブル全体となる点に注意しておいてください。
テーブルからのレコードを更新する方法については以上です。次は既存のレコードを削除する方法を見ていきましょう。
まとめ
- テーブルの既存レコードを更新するには
update文を使う update文はwhere句で更新条件を指定できるwhere句を省略するとテーブルのすべてのレコードが更新対象となるので注意する