Oracle刪除表資料


在本教學中將學習如何使用Oracle DELETE語句從表中刪除一行或多行資料記錄。

要從表中刪除一行或多行,請按如下所示使用Oracle DELETE語句:

DELETE
FROM
    table_name
WHERE
    condition;

在這個語句中,

  • 首先,指定要從中刪除資料的表的名稱。
  • 其次,通過使用WHERE子句中的條件指定應該刪除哪些行。如果省略了WHERE子句,則Oracle DELETE語句將從表中刪除所有行。

請注意,使用TRUNCATE TABLE語句刪除大型表中的所有行會更快更高效。

Oracle DELETE範例

為了演示目的,這裡建立一個名為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);

此語句將資料從範例資料庫中的ordersorder_items表複製到建立的sales表中。

1. Oracle DELETE - 從表中刪除一行

以下語句刪除了一個訂單號為1,專案號為1的行記錄:

DELETE
FROM
    sales
WHERE
    order_id = 1
    AND item_id = 1;

執行上面語句,Oracle返回了以下訊息:

1 行已刪除。

2. Oracle DELETE - 從表中刪除多行

以下語句刪除了訂單號為1的所有行:

DELETE
FROM
    sales
WHERE
    order_id = 1;

執行上面語句,Oracle顯示了以下訊息:

12 行已刪除。

3. Oracle DELETE - 刪除表中的所有行

以下範例刪除sales表中的所有行:

DELETE FROM sales;

執行上面語句,Oracle顯示了以下訊息:

625 行已刪除。

4. Oracle刪除 - 級聯刪除

在現實應用中,經常從與其他表中的行具有外來鍵關係的表中來刪除行記錄。

例如,想要從orders表中刪除id1的銷售訂單,並從order_items表中刪除與訂單id1關聯的所有行專案。 通常可以發出兩個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_id1的所有行也被資料庫系統自動刪除。

在本教學中,您已學習如何使用Oracle DELETE語句來刪除指定表中行記錄。