DELETE FROM table_name [WHERE condition];
無 WHERE 則刪除全表資料,極度危險,生產環境嚴禁。
-- 刪除特定課程
DELETE FROM courses
WHERE course_designater = 'Java110';
-- 複雜條件:多欄位精確匹配
DELETE FROM classconvenings
WHERE classes_num_fk > 4
AND class_convene_date = TO_DATE('2006-02-15 00:00:00', 'YYYY-MM-DD HH24:MI:SS')
AND class_location_fk = 'Seattle-Training Room 1';
CREATE TABLE Employee (
ID VARCHAR2(4) NOT NULL,
First_Name VARCHAR2(10),
Last_Name VARCHAR2(10),
Start_Date DATE,
End_Date DATE,
Salary NUMBER(8,2),
City VARCHAR2(10),
Description VARCHAR2(15)
);
-- 插入 8 筆資料 (薪資範圍 1232 ~ 7897)
INSERT INTO Employee VALUES ('01','Jason','Martin', DATE '1996-07-25', DATE '2006-07-25', 1234.56, 'Toronto', 'Programmer');
INSERT INTO Employee VALUES ('02','Alison','Mathews', DATE '1976-03-21', DATE '1986-02-21', 6661.78, 'Vancouver', 'Tester');
INSERT INTO Employee VALUES ('03','James','Smith', DATE '1978-12-12', DATE '1990-03-15', 6544.78, 'Vancouver', 'Tester');
INSERT INTO Employee VALUES ('04','Celia','Rice', DATE '1982-10-24', DATE '1999-04-21', 2344.78, 'Vancouver', 'Manager');
INSERT INTO Employee VALUES ('05','Robert','Black', DATE '1984-01-15', DATE '1998-08-08', 2334.78, 'Vancouver', 'Tester');
INSERT INTO Employee VALUES ('06','Linda','Green', DATE '1987-07-30', DATE '1996-01-04', 4322.78, 'New York', 'Tester');
INSERT INTO Employee VALUES ('07','David','Larry', DATE '1990-12-31', DATE '1998-02-12', 7897.78, 'New York', 'Manager');
INSERT INTO Employee VALUES ('08','James','Cat', DATE '1996-09-17', DATE '2002-04-15', 1232.78, 'Vancouver', 'Tester');
COMMIT;
DELETE FROM Employee WHERE Salary > 3000; -- 4 rows deleted. SELECT * FROM Employee; -- 剩餘 4 筆:薪資 ≤ 3000 的員工
| 指令 | 類型 | 可回滾 | 觸發器 | 高水位線 | 速度 | 用途 |
|---|---|---|---|---|---|---|
DELETE | DML | ✓ | 觸發 | 不重置 | 慢 | 條件刪除、需審計 |
TRUNCATE | DDL | ✗ | 不觸發 | 重置 (釋放空間) | 極快 | 全表清空、重置自增 |
DROP | DDL | ✗ | 不觸發 | 刪除物件 | 極快 | 移除整張表結構 |
DELETE FROM project WHERE pro_id = 1006; -- 0 rows deleted. (不報錯,SQL%ROWCOUNT = 0)
DELETE FROM big_table WHERE created < SYSDATE - 365 AND ROWNUM <= 10000;循環執行並 `COMMIT`,避免 Undo 爆滿與鎖升級。
DELETE FROM emp WHERE deptno = 10 RETURNING empno, ename BULK COLLECT INTO l_ids, l_names;