MySQL 9.1のテーブルデータを削除する方法
MySQL 9.1のデータベースを運用していると、テーブルのデータを削除したい場面がよくあります。本記事では、MySQL 9.1でのテーブルデータの削除方法について詳細に解説します。
1. DELETE文を使ってデータを削除する
DELETE文を使用すると、特定の条件に一致するデータのみを削除できます。
DELETE FROM テーブル名 WHERE 条件;
例:users テーブルの id が 5 のレコードを削除
DELETE FROM users WHERE id = 5;
すべてのレコードを削除(注意!)
DELETE FROM users;
DELETE文を実行すると、データが削除されますが、テーブルの構造やインデックスは保持されます。
DELETEのパフォーマンス向上
MySQL 9.1では DELETE 文のパフォーマンスを向上させるために、以下の方法が有効です:
- インデックスを適切に設定する
DELETEの代わりにPARTITIONを利用する(パーティショニングテーブルの場合)DELETE文にORDER BYを追加してI/O負荷を軽減する
2. TRUNCATE TABLE で全データを削除する
TRUNCATE TABLE は、テーブル内のすべてのデータを一括削除するSQLコマンドです。
TRUNCATE TABLE テーブル名;
TRUNCATE TABLE の特徴
DELETEと異なり、全レコードを一括で削除- 自動的にオートインクリメント(AUTO_INCREMENT)がリセットされる
- 高速に処理できる(
DELETEよりも高速) - トリガーは発動しない(MySQL 9.1では制約がある)
users テーブルを空にする
TRUNCATE TABLE users;
3. DROP TABLE でテーブルごと削除する
テーブルを完全に削除したい場合は DROP TABLE を使用します。
DROP TABLE テーブル名;
users テーブルを削除する
DROP TABLE users;
DROP TABLE はテーブル自体を削除するため、テーブルの構造も失われます。再度データを追加するには、新しくテーブルを作成する必要があります。
DROP TABLE の拡張機能(MySQL 9.1)
DROP TABLE IF EXISTS テーブル名;で、存在しない場合のエラーを防ぐCASCADEを指定して関連する外部キー制約を削除RESTRICTで安全な削除を実施
4. DELETE と TRUNCATE の違い
| 操作 | データ削除 | インデックス維持 | AUTO_INCREMENT リセット | ロールバック可能 | トリガー |
|---|---|---|---|---|---|
| DELETE | 指定行のみ削除 | 維持される | リセットされない | 可能(トランザクション対応) | 発動する |
| TRUNCATE | 全データ削除 | 維持される | リセットされる | 不可(トランザクション非対応) | 発動しない |
5. 追加の最適化ポイント
MySQL 9.1では、データ削除の最適化に役立つ以下のポイントも考慮しましょう。
OPTIMIZE TABLE を実行する
削除後にフラグメント化したストレージを最適化できます。
OPTIMIZE TABLE users;
ANALYZE TABLE を実行する
インデックスの統計情報を更新し、パフォーマンスを向上させます。
ANALYZE TABLE users;
まとめ
| 操作 | 主な用途 |
|---|---|
| DELETE | 特定のデータのみ削除したい場合 |
| TRUNCATE | 全データを削除してリセットしたい場合(テーブル構造は残す) |
| DROP | テーブルごと削除する場合 |
状況に応じて適切な方法を選び、安全にデータを管理しましょう!

コメント