Oracle Delete
在本教程中,您将学习如何使用Oracle DELETE语句从表中删除一行或多行。
要从表中删除一行或多行,请按如下所示使用Oracle DELETE语句:
DELETE FROM table_name WHERE condition;
在这个语句中,
(1)指定要从中删除数据的表的名称。
(2)通过使用WHERE子句中的条件指定应该删除哪些行。如果省略了WHERE子句,则Oracle DELETE语句将从表中删除所有行。
请注意,使用语句删除大型表中的所有行会更快更高效。
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);
此语句将数据从中的orders和order_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表中删除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的所有行也被数据库系统自动删除。