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

insert文によってテーブルに作成したレコードは delete 文で削除できます。

delete from categories where id = 100;

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

delete from テーブル名 where 列名 = データ, ...;

先ほどのSQLの場合は削除対象のテーブルを categories テーブルとしています。また select 文と同様に where 句を使って削除対象となるレコードを決定します。さきほどのSQL文の場合は where 句によって id100 のレコードを削除対象としています。

それでは実際に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]> 

期待していたとおり id100 のレコードが削除されているのがわかります。

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 句を省略するとテーブルのすべてのレコードが削除対象となるので注意する