「MySQLのフィールド削除のコマンドTRUNCATEとDELETEの違い」の編集履歴(バックアップ)一覧はこちら
追加された行は緑色になります。
削除された行は赤色になります。
フィールドデータを削除する場合のコマンドについて考えていきたいと思います。8月13日記事
~
~
目次
#contents
~
~
----
~
*TRUNCATE TABLE table_name
+TRUNCATEではDROP TABLEを行った上で再度同じテーブルを作成する
+AUTO_INCREMENTが設定されている場合はAUTO_INCREMENTの値は初期化できる。
+障害がおこったときに前の状態に戻るというロールバックはできない
使用例(全フィールドデータを削除後、以前と同じテーブルの状態に戻す。)
TRUNCATE TABLE テーブル名;
~
~
*DELETE FROM table_name
+DELETEはTABLEデータを一つずつ削除する
+DELETEの場合はデータが削除されるだけでAUTO_INCREMENTの値は初期化できない。
+障害がおこったときに前の状態に戻るというロールバックはできる。
使用例
DELETE FROM テーブル名 WHERE id = '1';
~
~
*AUTO_INCREMENTの初期化
AUTO_INCREMENTだけを初期化したいのであれば、&color(red){全削除後}
以下のようにします。
~
ALTER TABLE table_name auto_increment = 1;
~
~
*削除コマンドを走らせる以外にもデータを消す方法はある。
確かに、DELETEコマンドを走らせることでフィールドのデータを削除することができます。しかし、何度も消していると、ハードディスクのデータが飛び飛びで記録されていくようになり、[[フラグメンテーション:http://e-words.jp/w/%E3%83%95%E3%83%A9%E3%82%B0%E3%83%A1%E3%83%B3%E3%83%86%E3%83%BC%E3%82%B7%E3%83%A7%E3%83%B3.html]]を起こすようになってしまいます。そのため、ハードディスクにはエンドユーザには削除させるように見せかけるためにstatusカラムというものを作り、0は削除状態、1は下書き状態、2は公開状態というテーブル設計をすることで、見かけ上削除することができます。このようなテーブル設計の状態にしてあれば、もし、セキュリティホールをつかれて、データを削除されてしまった場合、statusカラムを0から2の状態等にすれば、データを簡単に復元することができます。
~
~
*まとめ
+全削除の場合はTRANCATEコマンド。
+一つずつ削除の場合はDELETEコマンド。
+statusカラムを設計し、statusカラムの状態2から0にするようなUPDATEコマンドを走らせることで、投稿のログを残したまま、フラグメンテーションを起こさず、データを保存することができます。(もし、ディスク領域がいっぱいになってきたらMySQLサーバにログインして、手で(管理者が独自にコマンドを走らせて)消すようにしましょう。)
~
~
以上
フィールドデータを削除する場合のコマンドについて考えていきたいと思います。8月13日記事
~
~
目次
#contents
~
~
----
~
*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だけを初期化したいのであれば、&color(red){全削除後}
以下のようにします。
~
ALTER TABLE table_name auto_increment = 1;
~
~
*削除コマンドを走らせる以外にもデータを表示させない(消す)方法はある。
確かに、DELETEコマンドを走らせることでフィールドのデータを削除することができます。しかし、何度も消していると、ハードディスクのデータが飛び飛びで記録されていくようになり、[[フラグメンテーション:http://e-words.jp/w/%E3%83%95%E3%83%A9%E3%82%B0%E3%83%A1%E3%83%B3%E3%83%86%E3%83%BC%E3%82%B7%E3%83%A7%E3%83%B3.html]]を起こすようになってしまいます。そのため、ハードディスクにはエンドユーザには削除させるように見せかけるためにstatusカラムというものを作り、0は削除状態、1は下書き状態、2は公開状態というテーブル設計をすることで、見かけ上削除することができます。このようなテーブル設計の状態にしてあれば、もし、セキュリティホールをつかれて、データを削除されてしまった場合、statusカラムを0から2の状態等にすれば、データを簡単に復元することができます。
~
~
*まとめ
+全削除の場合はTRANCATEコマンド。
+一つずつ削除の場合はDELETEコマンド。
+statusカラムを設計し、statusカラムの状態2から0にするようなUPDATEコマンドを走らせることで、投稿のログを残したまま、フラグメンテーションを起こさず、データを保存することができます。(もし、ディスク領域がいっぱいになってきたらMySQLサーバにログインして、手で(管理者が独自にコマンドを走らせて)消すようにしましょう。)
~
~
以上