フィールドデータを削除する場合のコマンドについて考えていきたいと思います。8月13日記事
目次
TRUNCATE TABLE テーブル名
-
TRUNCATEではDROP TABLEを行った上で再度同じテーブルを作成する
-
AUTO_INCREMENTが設定されている場合はAUTO_INCREMENTの値は初期化できる。
-
障害がおこったときに前の状態に戻るというロールバックはできない
使用例(全フィールドデータを削除後、以前と同じテーブルの状態に戻す。)
TRUNCATE TABLE テーブル名;
DELETE FROM テーブル名
-
DELETEはTABLEデータを一つずつ削除する
-
DELETEの場合はデータが削除されるだけでAUTO_INCREMENTの値は初期化できない。
-
障害がおこったときに前の状態に戻るというロールバックはできる。
使用例
DELETE FROM テーブル名 WHERE id = '1';
AUTO_INCREMENTの初期化
AUTO_INCREMENTだけを初期化したいのであれば、
全削除後
以下のようにします。
ALTER TABLE table_name auto_increment = 1;
削除コマンドを走らせる以外にもデータを表示させない(消す)方法はある。
確かに、DELETEコマンドを走らせることでフィールドのデータを削除することができます。しかし、何度も消していると、ハードディスクのデータが飛び飛びで記録されていくようになり、フラグメンテーションを起こすようになってしまいます。そのため、ハードディスクにはエンドユーザには削除させるように見せかけるためにstatusカラムというものを作り、0は削除状態、1は下書き状態、2は公開状態というテーブル設計をすることで、見かけ上削除することができます。このようなテーブル設計の状態にしてあれば、もし、セキュリティホールをつかれて、データを削除されてしまった場合、statusカラムを0から2の状態等にすれば、データを簡単に復元することができます。
まとめ
-
全削除の場合はTRANCATEコマンド。
-
一つずつ削除の場合はDELETEコマンド。
-
statusカラムを設計し、statusカラムの状態2から0にするようなUPDATEコマンドを走らせることで、投稿のログを残したまま、フラグメンテーションを起こさず、データを保存することができます。(もし、ディスク領域がいっぱいになってきたらMySQLサーバにログインして、手で(管理者が独自にコマンドを走らせて)消すようにしましょう。)
以上
最終更新:2015年08月14日 09:09