在本教學中將學習如何使用Oracle DELETE
語句從表中刪除一行或多行資料記錄。
要從表中刪除一行或多行,請按如下所示使用Oracle DELETE
語句:
DELETE
FROM
table_name
WHERE
condition;
在這個語句中,
WHERE
子句中的條件指定應該刪除哪些行。如果省略了WHERE
子句,則Oracle DELETE
語句將從表中刪除所有行。請注意,使用TRUNCATE TABLE語句刪除大型表中的所有行會更快更高效。
為了演示目的,這裡建立一個名為sales
的新表,其中包含所有銷售訂單資料:
DROP TABLE sales;
CREATE TABLE sales AS
SELECT
order_id,
item_id,
product_id,
quantity,
unit_price,
status,
order_date,
salesman_id
FROM
orders
INNER JOIN order_items
USING(order_id);
此語句將資料從範例資料庫中的orders
和order_items
表複製到建立的sales
表中。
以下語句刪除了一個訂單號為1
,專案號為1
的行記錄:
DELETE
FROM
sales
WHERE
order_id = 1
AND item_id = 1;
執行上面語句,Oracle返回了以下訊息:
1 行已刪除。
以下語句刪除了訂單號為1
的所有行:
DELETE
FROM
sales
WHERE
order_id = 1;
執行上面語句,Oracle顯示了以下訊息:
12 行已刪除。
以下範例刪除sales
表中的所有行:
DELETE FROM sales;
執行上面語句,Oracle顯示了以下訊息:
625 行已刪除。
在現實應用中,經常從與其他表中的行具有外來鍵關係的表中來刪除行記錄。
例如,想要從orders
表中刪除id
為1
的銷售訂單,並從order_items
表中刪除與訂單id
是1
關聯的所有行專案。 通常可以發出兩個DELETE
語句,如下所示:
-- 第一條
DELETE FROM
orders
WHERE
order_id = 1;
-- 第二條
DELETE FROM
order_items
WHERE
order_id = 1;
COMMIT WORK;
請注意,COMMIT WORK
語句確保兩個DELETE
語句以全部或全部方式執行,以防第一條語句成功,但第二個DELETE
語句失敗時在order_items
表中的孤行。
但是,如果知道如何正確設定表的約束,那麼這是不必要的。
在這種情況下,當建立order_items
表時,可以使用DELETE CASCADE
選項定義一個外來鍵約束,如下所示:
CREATE TABLE order_items
(
order_id NUMBER( 12, 0 ) ,
-- other columns
-- ...
CONSTRAINT fk_order_items_orders
FOREIGN KEY( order_id )
REFERENCES orders( order_id )
ON DELETE CASCADE
);
通過這樣做,每當從orders
表中刪除一行時,例如:
DELETE
FROM
orders
WHERE
order_id = 1;
order_items
表中order_id
為1
的所有行也被資料庫系統自動刪除。
在本教學中,您已學習如何使用Oracle DELETE
語句來刪除指定表中行記錄。