フィールドデータを削除する場合のコマンドについて考えていきたいと思います。8月13日記事

目次





TRUNCATE TABLE テーブル名

  1. TRUNCATEではDROP TABLEを行った上で再度同じテーブルを作成する
  2. AUTO_INCREMENTが設定されている場合はAUTO_INCREMENTの値は初期化できる。
  3. 障害がおこったときに前の状態に戻るというロールバックはできない

使用例(全フィールドデータを削除後、以前と同じテーブルの状態に戻す。)

TRUNCATE TABLE テーブル名;



DELETE FROM テーブル名

  1. DELETEはTABLEデータを一つずつ削除する
  2. DELETEの場合はデータが削除されるだけでAUTO_INCREMENTの値は初期化できない。
  3. 障害がおこったときに前の状態に戻るというロールバックはできる。

使用例

DELETE FROM テーブル名 WHERE id = '1';



AUTO_INCREMENTの初期化

AUTO_INCREMENTだけを初期化したいのであれば、 全削除後 以下のようにします。

ALTER TABLE table_name auto_increment = 1;



削除コマンドを走らせる以外にもデータを表示させない(消す)方法はある。

確かに、DELETEコマンドを走らせることでフィールドのデータを削除することができます。しかし、何度も消していると、ハードディスクのデータが飛び飛びで記録されていくようになり、フラグメンテーションを起こすようになってしまいます。そのため、ハードディスクにはエンドユーザには削除させるように見せかけるためにstatusカラムというものを作り、0は削除状態、1は下書き状態、2は公開状態というテーブル設計をすることで、見かけ上削除することができます。このようなテーブル設計の状態にしてあれば、もし、セキュリティホールをつかれて、データを削除されてしまった場合、statusカラムを0から2の状態等にすれば、データを簡単に復元することができます。

まとめ

  1. 全削除の場合はTRANCATEコマンド。
  2. 一つずつ削除の場合はDELETEコマンド。
  3. statusカラムを設計し、statusカラムの状態2から0にするようなUPDATEコマンドを走らせることで、投稿のログを残したまま、フラグメンテーションを起こさず、データを保存することができます。(もし、ディスク領域がいっぱいになってきたらMySQLサーバにログインして、手で(管理者が独自にコマンドを走らせて)消すようにしましょう。)



以上