データの誤削除を防ぐための作業テクニックとして、「削除する前に削除対象を確認する」というものがあります。
本番環境での作業や、試験日程がシビアな総合テストの作業等、ミスが許されない場合に特に有効です。
今回の記事では、SQLの例とUNIX/LINUXの例を挙げて紹介します。
【SQLの例】
事前にdelete文と同じ条件でselect文を打つことで、delete文のミスに事前に気付くことができます。
例えば、商品テーブルに以下のようなレコードが登録されているとします。
select * from 商品;
1 2 3 4 5 6 7 8 |
+--------+--------+------------+ | 商品ID | 商品名 | 引き渡し先 | +--------+--------+------------+ | 1 | 商品1 | A社 | | 2 | 商品2 | B社 | | 3 | 商品3 | NULL | | 4 | 商品4 | D社 | +--------+--------+------------+ |
このテーブルについて、引き渡し先が登録されているレコード(NULLではないレコード)を削除しようとした場合、以下のようなSQL文を作成します。
delete from 商品 where 引き渡し先 is not null;
しかし、仮にここで条件文のnotを忘れると、逆に引き渡し先が登録されていないレコード(NULLのレコード)を削除してしまいます。
そこで、同じ条件で事前にSELECT文を発行します。
select * from 商品 where 引き渡し先 is not null;
このselect文を発行することで、事前に消えるレコードを見ることができます。
今回の例では以下のレコードが消えることを確認できます。
1 2 3 4 5 6 7 |
+--------+--------+------------+ | 商品ID | 商品名 | 引き渡し先 | +--------+--------+------------+ | 1 | 商品1 | A社 | | 2 | 商品2 | B社 | | 4 | 商品4 | D社 | +--------+--------+------------+ |
【UNIX/LINUXの例】
rmコマンドを-fオプション無しで対話式で削除するにはファイル数が多すぎる場合において、事前にrm -fコマンドと同じ対象にls -lコマンドを発行することで、削除対象のミスに事前に気付くことができます。
例えば、dir1というディレクトリを削除したい場合、いきなりrm -rfコマンドを発行するのではなく、事前にdir1に対してls -lコマンドを発行します。
(下位ディレクトリも確認したい場合は、ls -lRコマンドを発行します)
1 2 3 4 |
[hoge@localhost hoge]# ls -l dir1 -rwxrwxrwx 1 hoge hoge 8737 6月 28 09:34 2018 file1 -rwxrwxrwx 1 hoge hoge 18 7月 18 22:19 2018 file2 [hoge@localhost hoge]# |
これで事前にどのようなファイルが削除されるのかを確認することができるため、問題がなければ「ls -l」を「rm -rf」に置き換えて実行します。
コメント