「MySQLのフィールド削除のコマンドTRUNCATEとDELETEの違い」の編集履歴(バックアップ)一覧はこちら

MySQLのフィールド削除のコマンドTRUNCATEとDELETEの違い」(2015/08/14 (金) 09:09:15) の最新版変更点

追加された行は緑色になります。

削除された行は赤色になります。

フィールドデータを削除する場合のコマンドについて考えていきたいと思います。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サーバにログインして、手で(管理者が独自にコマンドを走らせて)消すようにしましょう。) ~ ~ 以上

表示オプション

横に並べて表示:
変化行の前後のみ表示: