PHPプログラミング

ベストプラクティス

データベース SQLite

SQLite3でデータを削除:DELETE

  • このエントリーをはてなブックマークに追加

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

目次

  1. #  データを削除する
  2. #  データを削除するSQL
  3. #  特定の条件を満たす1件のデータのみを削除する
  4. #  特定の条件を満たす全てのデータを削除する

データを削除する

今回は、テーブルへ登録されたデータを削除する方法について解説します。
次の順に、それぞれの方法をコードを交えながら進めていきます。

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

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

テーブル名:test
カラム名 その他
id INTEGER PRIMARY KEY
name TEXT NOT NULL
age INTEGER NOT NULL
created_datetime TIMESTAMP DEFAULT (datetime(CURRENT_TIMESTAMP,’localtime’))

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

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であるUPDATE文について、基本的な形を紹介します。

DELETE FROM テーブル WHERE 条件式;

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

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

特定の条件を満たす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を削除する」といった条件を指定することも可能です。

以上、SQLite3のデータを削除する方法でした。

  • このエントリーをはてなブックマークに追加