続いて既存のレコードを更新する方法について見ていきましょう。
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
句を省略するとテーブルのすべてのレコードが更新対象となるので注意する