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 | テーブルごと削除する場合 |
状況に応じて適切な方法を選び、安全にデータを管理しましょう!
コメント