- DELETE 文の使い方を知りたい!
このような方に向けて書きました。
本記事ではDELETE
の基礎と、実際のクエリを実例としてご紹介します。
DELETE の基本
DELETE
は、テーブルから特定のレコードを削除します。
DELETE FROM table_name
WHERE condition;
各要素の内容は以下の通りです。
句 | 効果 |
---|---|
table_name | 削除対象のテーブル名 |
WHERE condition | 削除する行の条件を指定 |
DELETE の具体例
具体的なクエリ例を示しつつ、DELETE
の使い方を確認してきましょう。
特定の行を削除
特定の行を削除する場合には、以下のクエリを実行します。
DELETE FROM employees
WHERE employee_id = 1;
上記ではemployee_id
が1
のレコードを削除します。
ただしDELETE
は一度実行すると元に戻せないので、以下のコマンドで削除予定のレコードを確認しておくことをお勧めします。
SELECT *
FROM employees
WHERE employee_id = 1;
employees
テーブルが次のようなものだったとします。
employee_id | name | position | department |
---|---|---|---|
1 | John Doe | Manager | Sales |
2 | Jane Smith | Developer | IT |
3 | Emily Davis | Analyst | Marketing |
クエリ実行後のテーブルは以下になります。
employee_id | name | position | department |
---|---|---|---|
2 | Jane Smith | Developer | IT |
3 | Emily Davis | Analyst | Marketing |
employee_id
が1
のレコードが削除され、 2
と3
のレコードのみが残ります。
複数の条件を指定して削除
複数条件を指定する場合には、AND
演算子を使います。
DELETE FROM employees
WHERE department = 'Sales' AND salary < 30000;
今回もDELETE
クエリを使っているので、削除実行前にあらかじめ削除対象のレコードを確認しておくべきです。
SELECT * FROM employees
WHERE department = 'Sales' AND salary < 30000;
出力結果が正しければ、先ほどのDELETE
クエリを実行しましょう。
employees
テーブルが次のようなものだったとします。
employee_id | name | position | department | salary |
---|---|---|---|---|
1 | John Doe | Manager | Sales | 50000 |
2 | Jane Smith | Developer | IT | 40000 |
3 | Emily Davis | Analyst | Marketing | 35000 |
4 | Chris Brown | Sales Rep | Sales | 25000 |
5 | Pat Taylor | Sales Rep | Sales | 28000 |
クエリ実行後のテーブルは以下になります。
employee_id | name | position | department | salary |
---|---|---|---|---|
1 | John Doe | Manager | Sales | 50000 |
2 | Jane Smith | Developer | IT | 40000 |
3 | Emily Davis | Analyst | Marketing | 35000 |
department
がSales
でsalary
が30000
未満のレコードが2つ存在していましたが、クエリの実行でこれらが削除されました。
全行を削除する場合
WHERE
句を指定しなければ、全行削除になります。
DELETE FROM employees;
こちらの操作は慎重に行なってください。
トランザクションを使った安全な削除方法
トランザクションを使うと、操作が失敗した場合には変更前に戻せます。
手順としては、以下の通りです。
- トランザクションを開始
- 削除前の状態を確認
- 削除クエリを実行
- 削除後の状態を確認
- 問題がなければ、トランザクションをコミット
- 問題があれば、トランザクションをロールバック
トランザクションを使うことで、エラーが発生しても元に戻せます。
トランザクションを開始
以下のコマンドでトランザクションを開始します。
BEGIN;
削除前の状態を確認
削除予定のレコードを取得します。
SELECT *
FROM employees
WHERE department = 'Sales' AND salary < 30000;
返ってきた結果が削除したいものかをよく確認しましょう。
削除クエリの実行
先ほどのSELECT
で指定した条件で、DELETE
を行います。
DELETE FROM employees
WHERE department = 'Sales' AND salary < 30000;
削除後の状態を確認
全レコードを取得して、変更後のテーブルを確認します。
SELECT *
FROM employees;
問題なければ、トランザクションをコミット
正常に削除ができていれば、以下のコマンドを実行しましょう。
COMMIT;
問題があれば、トランザクションをロールバック
何か問題があった場合には、ロールバックで元に戻します。
ROLLBACK;
コメント