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