MySQLでTRUNCATEに条件を指定できる?WHERE句が使えない理由とDELETE文による代替方法
MySQLでは、TRUNCATE文に条件(WHERE句)を指定することはできません。TRUNCATEはテーブル内の全データを一括削除するためのコマンドであり、特定の行だけを対象に削除する使い方は想定されていません。
そのため、条件を付けてレコードを削除したい場合は、代わりにDELETE文を使用します。
DELETE文の基本構文
DELETE FROM テーブル名 WHERE 条件;
この構文であれば、任意の条件に一致する行だけを柔軟に削除できます。ただし、処理速度という観点では注意点があります。TRUNCATEはログへの書き込みを行わないため大量データの削除が高速である一方、DELETEは削除対象の各行をログに記録しながら処理するため、TRUNCATEと比べて時間がかかる傾向があります。
実際にテーブルを作成して検証してみよう
まず、動作を確認するためのサンプルテーブルを作成します。
mysql> create table DeleteDemo -> ( -> Id int, -> Name varchar(100) -> ); Query OK, 0 rows affected (1.22 sec)
テストデータの挿入
次に、INSERTコマンドを使って複数のレコードを登録します。
mysql> insert into DeleteDemo values(101,'Carol'); Query OK, 1 row affected (0.15 sec) mysql> insert into DeleteDemo values(102,'Sam'); Query OK, 1 row affected (0.15 sec) mysql> insert into DeleteDemo values(103,'Bob'); Query OK, 1 row affected (0.16 sec) mysql> insert into DeleteDemo values(104,'Mike'); Query OK, 1 row affected (0.17 sec) mysql> insert into DeleteDemo values(105,'John'); Query OK, 1 row affected (0.09 sec) mysql> insert into DeleteDemo values(106,'Maria'); Query OK, 1 row affected (0.20 sec) mysql> insert into DeleteDemo values(107,'Johnson'); Query OK, 1 row affected (0.17 sec)
登録データの確認
SELECTコマンドで、テーブル内の全レコードを表示してみましょう。
mysql> select * from DeleteDemo;
出力結果
+------+---------+ | Id | Name | +------+---------+ | 101 | Carol | | 102 | Sam | | 103 | Bob | | 104 | Mike | | 105 | John | | 106 | Maria | | 107 | Johnson | +------+---------+ 7 rows in set (0.00 sec)
WHERE句付きのDELETE文を実行する
ここからが本題です。TRUNCATEではWHERE句が使えないため、条件付き削除にはDELETE文を使用します。例として、「Idが104より大きいレコード」を削除してみます。
mysql> delete from DeleteDemo where Id > 104; Query OK, 3 rows affected (0.13 sec)
削除後のデータ確認
再度SELECTコマンドを実行して、テーブルの状態を確認しましょう。
mysql> select * from DeleteDemo;
出力結果
+------+-------+ | Id | Name | +------+-------+ | 101 | Carol | | 102 | Sam | | 103 | Bob | | 104 | Mike | +------+-------+ 4 rows in set (0.00 sec)
出力結果を見ると、Idが104より大きい3件のレコード(John、Maria、Johnson)が正しく削除されていることがわかります。
まとめ:TRUNCATEとDELETEの使い分け
- 全件削除して高速化したい場合 … ログを書き込まないTRUNCATEが有利
- 条件を指定して一部だけ削除したい場合 … WHERE句が使えるDELETE一択
このように、MySQLで条件付き削除を行う場合はTRUNCATEではなくDELETE文を使用するのが基本です。用途に応じて両者を適切に使い分けるとよいでしょう。
-
MySQLで条件を指定してレコード数をカウントする方法
MySQLで条件付きカウントを実現するにはMySQLで単純に件数を数える場合は COUNT() 関数を使用しますが、特定の条件に合致する行だけを数えたい場合は、集計関数 SUM() を活用すると便利です。SUM() の引数に条件式を渡すことで、条件を満たす行のみを効率的にカウントできます。ここでは、サンプルテーブルを作成し、実際に条件付きカウントを行う手順を解説します。1. サンプルテーブルの作成まず、以下のコマンドでテーブルを作成します。mysql> create table DemoTable1515 -> (  
-
MySQLでSELECTクエリを使用してデータを挿入(INSERT)する方法
MySQLでは、INSERT文とSELECTクエリを組み合わせることで、テーブルにデータを挿入することができます。通常、SELECTは既存のテーブルからデータを取得するために使われますが、値を直接指定してINSERTを実行する際にも活用できる便利な手法です。基本構文SELECTクエリを使用してINSERTを実行する場合の構文は以下の通りです。insert into yourTableName(yourColumnName1,yourColumnName2,yourColumnName3,...N) select yourValue1,yourValue2,yourValue3,......N;