DELETE
ステートメントを使用して、テーブル内のデータを削除できます。
WHERE
句は、削除する行を正確に指定するために使用できます。
WHERE
によって適用されるフィルタリング条件に応じて、すべての行、一部の行、またはなしを削除できます。 条項。
簡単な削除
まず、削除するアーティストを見つけましょう:
sqlite> SELECT * FROM Artists; ArtistId ArtistName Bio -------- -------------------- ---------------------------------------- 1 Joe Satriani 2 Steve Vai 3 The Tea Party 4 Noiseworks 5 Wayne Jury 6 Mr Percival 7 Iron Maiden 8 Atmasphere Australian jazz band centred around poly 9 Ian Moss 10 Magnum 11 Strapping Young Lad 12 Slayer 13 Primus 14 Pat Metheny 15 Frank Gambale 16 Mothers of Invention 17 The Wiggles
OK、アーティスト番号 12 を削除しましょう (スレイヤー)。
Artists からそのレコードを削除する簡単なdeleteステートメントを次に示します。 表:
DELETE FROM Artists WHERE ArtistId = 12;
したがって、それを実行した後、SELECT
を使用してレコードが実際に削除されたことを確認できます。 ステートメント:
sqlite> SELECT * FROM Artists WHERE ArtistId = 12; sqlite>
(結果なし)。
外部キー制約を使用したデータの削除
外部キーによって参照されているレコードを削除しようとすると、エラーが発生するはずです。主キーレコードを削除する前に、まず外部キーレコードを削除する必要があります。
たとえば、アーティストID 17 ( アーティスト から 表)は、 Albums の2つのレコードによって参照されています。 テーブル( ArtistId を参照) 列):
sqlite> SELECT * FROM Albums WHERE ArtistId = 17; AlbumId AlbumName ReleaseDate ArtistId -------- -------------------- ------------ ------------ 5 Yummy Yummy 1994 17 13 Big Red Car 1995 17
したがって、アーティスト 17 を削除しようとすると Artistsテーブル(主キーを含む)から、エラーが発生するはずです。
削除ステートメントは次のとおりです:
DELETE FROM Artists WHERE ArtistId = 17;
結果は次のとおりです:
sqlite> DELETE FROM Artists ...> WHERE ArtistId = 17; Error: FOREIGN KEY constraint failed sqlite>
したがって、主キーを削除する前に、外部キーレコードを削除する必要があります。
FOREIGNKEY制約が失敗しました
を取得しなかった場合 メッセージの場合、外部キー制約チェックを有効にする必要がある場合があります。 PRAGMA foreign_keys = ON;
を実行します 外部キー制約チェックを有効にします。
関連レコードの削除
それでは、 Albums 内の関連するレコードを削除しましょう。 上記の削除ステートメントを再試行する前に、テーブルを作成してください。
DELETE FROM Albums WHERE ArtistId = 17;
それらが削除されたことを確認してください:
sqlite> SELECT * FROM Albums WHERE ArtistId = 17; sqlite>
(結果なし)。
それでは、元の削除ステートメントをもう一度試してみましょう:
DELETE FROM Artists WHERE ArtistId = 17;
有望に見えます—エラーなし:
sqlite> DELETE FROM Artists ...> WHERE ArtistId = 17; sqlite>
そしてSELECT
ステートメントは削除を確認します:
sqlite> SELECT * FROM Artists WHERE ArtistId = 17; sqlite>
結果はありません。
すべての行を削除
WHERE
を省略すると、テーブル内のすべての行を削除できます。 条項。
予備のテーブルがあります( Albums1 )、それではそれを試してみましょう。
まず、実際にデータが含まれていることを確認しましょう。
sqlite> SELECT * FROM Albums1; AlbumId AlbumName Year ArtistId -------- -------------------- ------------ ------------ 1 Killers 1981 7 2 Powerslave 1984 7 3 Surfing with the Ali 1987 1 4 Heavy as a Really He 1995 11 5 Yummy Yummy 1994 17 6 Out of the Loop 2007 6 7 Suck on This 1989 13 8 Pork Soda 1993 13 9 Sailing the Seas of 1991 13 10 Flying in a Blue Dre 1989 1 11 Black Swans and Worm 2010 1 12 Somewhere in Time 1986 7 13 Big Red Car 1995 17
します。それでは、先に進んですべてを削除しましょう:
DELETE FROM Albums1;
それでは、内容をもう一度確認しましょう:
sqlite> SELECT * FROM Albums1; sqlite>
(結果なし)。