PHPプログラミング

レシピ

データベース SQLite

SQLite3でデータを削除:DELETE

SQLite3でテーブルに登録されている特定のデータを削除する方法について解説。

この記事のポイント

  • データを削除するSQLの基本について知る
  • 特定の条件を満たす1件のデータのみを削除する
  • 特定の条件を満たす全てのデータを削除する

目次

データを削除する

今回は、テーブルへ登録されたデータを削除する方法について解説します。

進めて行くにあたり、次のようなテーブルがあることを前提とします。

テーブル名:test
カラム名その他
idINTEGERPRIMARY KEY
nameTEXTNOT NULL
ageINTEGERNOT NULL
created_datetimeTIMESTAMPDEFAULT (datetime(CURRENT_TIMESTAMP,’localtime’))

こちらのテーブルには次のようなデータが登録されています。

testテーブルに入っているデータ

1|吉川|25|2017-07-30 00:00:00
2|佐藤|27|2017-07-30 00:00:00
3|Watson|22|2017-07-04 16:20:00
4|佐々木|27|2017-07-30 00:00:00
5|細田|30|2017-07-30 00:00:00
6|森田|22|2017-07-08 10:30:00
7|阿部|25|2017-07-30 00:00:00
8|大谷|28|2017-07-30 00:00:00
9|石田|23|2017-07-08 22:00:00
10|川谷|25|2017-07-30 00:00:00

データを削除するSQL

まずはデータ削除をするためのSQLであるDELETE文について、基本的な形を紹介します。

DELETE文の基本的なコード

DELETE FROM テーブル WHERE 条件式;

「テーブル」には削除したいデータが格納されているテーブル名を指定します。

その後ろのWHERE句は削除するデータを特定するための「条件式」が入ります。
例えば、IDに「1」をもつデータにのみ更新を行いたい場合、「WHERE id = 1」のように指定を行います。
このような指定方法で、特定のIDを持つデータだけを削除したり、「ある一定期間に登録されたデータは全て削除する」ような範囲を指定することも可能です。

特定の条件を満たす1件のデータのみを削除する

まずは、IDが一致する場合のみのシンプルな削除を実行してみましょう。

コード例

// データ削除
$sql = 'DELETE FROM test WHERE id = 3'; // IDが「1」のデータのみを削除
$res = $db->query($sql);

上記のコードを実行すると、テーブルに登録されているデータが1つ減り、削除されたことを確認できます。

削除を実行した後のテーブル

sqlite> select * from test;
1|吉川|25|2017-07-30 00:00:00
2|佐藤|27|2017-07-30 00:00:00
4|佐々木|27|2017-07-30 00:00:00
5|細田|30|2017-07-30 00:00:00
6|森田|22|2017-07-08 10:30:00
7|阿部|25|2017-07-30 00:00:00
8|大谷|28|2017-07-30 00:00:00
9|石田|23|2017-07-08 22:00:00
10|川谷|25|2017-07-30 00:00:00

IDが「3」のデータのみ削除されました。

なお、今回は条件式に指定したIDの値が整数だったので不要ですが、文字列を指定したい場合は「(シングルクォーテーション)」、または「(ダブルクォーテーション)」で囲む必要があるので注意してください。

特定の条件を満たす全てのデータを削除する

続いて、ある特定の日時に登録されたデータを全て削除していきます。
今回は、「2017年7月30日」に登録された全てのデータを削除の対象とします。

コード例

// データ削除
$sql = 'DELETE FROM test WHERE "2017-07-30 00:00:00" <= created_datetime AND created_datetime <= "2017-07-30 23:59:59"';
$res = $db->query($sql);

この処理を実行すると、testテーブルには次のデータが残ります。

削除の実行前

sqlite> select * from test;

1|吉川|25|2017-07-30 00:00:00
2|佐藤|27|2017-07-30 00:00:00
4|佐々木|27|2017-07-30 00:00:00
5|細田|30|2017-07-30 00:00:00
6|森田|22|2017-07-08 10:30:00
7|阿部|25|2017-07-30 00:00:00
8|大谷|28|2017-07-30 00:00:00
9|石田|23|2017-07-08 22:00:00
10|川谷|25|2017-07-30 00:00:00

削除の実行後

sqlite> select * from test;

6|森田|22|2017-07-08 10:30:00
9|石田|23|2017-07-08 22:00:00

WHERE句で指定した条件は、「2017年07月30日 00時00分00秒」〜「2017年07月30日 23時59分59秒」の間に登録されたデータを検索し、該当するデータを全て削除するという内容です。
同じように「20歳〜23歳を削除する」、「ID5〜10を削除する」といった条件を指定することも可能です。

こちらの記事は役に立ちましたか?

ありがとうございます。
もしよろしければ、あわせてフィードバックや要望などをご入力ください。

ありがとうございます。
コメントを送信しました。