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