MySQL削除データDeleteとTruncate文の使用比較

1587 ワード

空のmysqllテーブルの内容には、deleteとtruncateの2つの方法があります.whereパラメータを持たないdelete文はmysqlテーブルのすべてのコンテンツを削除し、truncate tableを使用してmysqlテーブルのすべてのコンテンツを空にすることができます.効率的にはdeleteよりtruncateの方が速いが、truncate削除後mysqlログは記録されず、データの復元はできない.
構文は次のとおりです.
 
  
TRUNCATE [TABLE] tbl_name

ここでは簡単に例を示します.
friendsテーブルのすべてのレコードを削除したいのですが、次の文を使用できます.
 
  
truncate table friends;

deleteの効果はmysqlテーブルのすべてのレコードを削除するのと同じですが、truncateはmysqlテーブルを保持する構造に相当し、このテーブルを再作成し、すべての状態が新しいテーブルに相当します.
構文:
delete文の定義.
 
  
DELETE [LOW_PRIORITY] [QUICK] [IGNORE] FROM tbl_name

[WHERE where_definition]

[ORDER BY ...]

[LIMIT row_count]

MySQLの文法は口語と似ていますが、どのテーブルからデータを削除したいのか、どのデータを削除したいのかを指摘すれば十分です.叙述文を書くとき、時間、場所、人物、環境、ストーリーのいくつかの要素が少なくないようにしなければならない.
例は最もイメージ的で、最も問題を説明することができます.だから、整然としないで役に立たないで、直接テーマに入ります.上の構文構造に従ってfirendsテーブルのすべてのuser_を削除したいです.nameはsimaopigの記録に等しく、
次のSQL文を使用できます.
 
  
delete from friends where user_name = 'simaopig';delete

注意事項:
構文構造から,update構文と同様にwhere句を省略できることが分かる.しかし、これは危険な行為です.where句を指定しないとdeleteはテーブルのすべてのレコードを削除し、すぐに削除します.泣きたいところがなくても、時間がありません.すぐに責任者とエラーを認め、すぐにMySQLログを見つけて、レコードをロールバックする必要があります.しかし、一度このような経験をしたことがあると、これはきっと印象的だと信じています.
不思議なことにinnodb上やmyisam上のビッグデータ量でインデックスファイルが極めて大きい場合、削除に成功することはほとんどありません!解決を待つ.
まとめるとtruncateコマンドは高速ですが、deleteコマンドのようにトランザクションに対して安全ではありません.したがって、truncate削除を実行するテーブルがトランザクション中である場合、このコマンドは終了し、エラー情報を生成します.