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

insert文によってテーブルに作成したレコードは update 文で更新できます。

update categories set title = 'PG' where id = 1;

update 文は次のような構文になります。

update テーブル名 set 列名 = データ, ... where 列名 = データ, ...;

先ほどのSQLの場合は更新対象のテーブルを categories テーブルとしています。また set 句には更新対象の列名とデータを = でつないでペアで定義します。また select 文と同様に where 句を使って更新対象となるレコードを決定します。さきほどのSQL文の場合は where 句によって id1 のレコードを更新対象として、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]> 

期待していたとおり id1 のレコードの title 列の値が PG に更新されているのがわかります。

複数列を更新する場合

もうひとつ練習してみましょう。set 句は更新対象の列を , カンマで区切って複数定義できます。たとえば次の update 文は id1 のレコードの 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]> 

期待していたとおり id1 のレコードの id 列の値が 100title 列の値が 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 句を省略するとテーブルのすべてのレコードが更新対象となるので注意する