Oracle 专题
专题目录
您的位置:database > Oracle专题 > Oracle删除表数据
Oracle删除表数据
作者:--    发布时间:2019-11-20

在本教程中将学习如何使用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语句来删除指定表中行记录。


网站声明:
本站部分内容来自网络,如您发现本站内容
侵害到您的利益,请联系本站管理员处理。
联系站长
373515719@qq.com
关于本站:
编程参考手册