前回は insert 文によるデータの使いについて解説しましたので、今回は delete 文によるデータの削除について解説したいと思います。
SQLを試したい場合は、 こちら でツールを公開していますので、ダウンロードをお願いします。
Delete文の書式
Delete 文は次の書式となります。
where 区に削除対象を絞り込むための検索条件を記述します。
もし where 区を記述し忘れた場合、全レコードが削除されてしまいますので、ご注意ください。
delete を試してみる
では、商品マスタから 「メーカー」が SONY のデータだけを削除することを考えてみましょう。
一番心配なのが、where 区の条件を間違えて意図していないレコードを削除してしまう事です。
そうならないように、通常は削除対象が正しく絞り込めているかを確認するため、 select 文を実行します。
今回の場合は、次のようになります。
select * from 商品マスタ where メーカー='SONY'
実行すると22件がヒットしました。
表示されたデータにおいて「メーカー」が SONY であることが確認できたら、抽出条件は意図したものになっている(つまり正しい)と判断できます。
後は、select * の部分を delete に変更して実行するだけです。
delete from 商品マスタ where メーカー='SONY'
ツールで実行すると以下の様な画面になります。
一瞬全てのデータが消えたと勘違いされるかもしれませんが、delete 文は結果を返さないので、単に何も表示されていないだけです。
では、本当に削除されたかどうかを確認するために、最初に実行した select 文を再度実行します。
select * from 商品マスタ where メーカー='SONY'
今度は、カラム名だけ表示されていますね。
検索した結果、ヒットするレコードが0件だったということです。
確かに削除されていますが、もしかして本当に全件削除されたってことは無いでしょうか?
そういう疑問を持つことは正しいです。
というのは、間違えて全件消した場合も同じ結果(カラム名だけが表示される)が返ってくるからです。
そこで、今度は where 区を外して全件表示してみます。
select * from 商品マスタ
すると、今回は71件ヒットしましたね。
これで、少なくとも誤って全件削除してしまったという疑いは晴れました。
今回は件数が少ないので全件表示してもストレスなく結果が返ってきますが、もし1000万件とかのデータを確認する場合、結果がなかなか返ってこないか、あるいは返ってきてもメモリ不足で表示できない場合があります。
データ件数が多いテーブルの場合は、表示件数を制限するとか、別の抽出条件を指定するとかの方法で確認します。
ちなみに、sqlite の場合、select 文の末尾に limit 表示件数 という指定をすれば、表示件数を制限することが出来ます。
例えば、検索結果の10件だけ表示したい場合は次の様になります。
select * from 商品マスタ limit 10
まとめ
今回は delete 文を解説しました。
- where 区で削除対象の絞り込み条件を指定する。
- where 区を指定しないと、全件が削除される。
- select で絞り込み条件を確認してから,delete文に置き換えて実行すると安心
という3点を押さえておけば、delete 文は単純です。
本サイトで公開しているツールを使えば、間違って削除してもすぐに元に戻せますので、色々とお試しいただければと思います。
コメント