概要:在本教程中,您将学习如何使用 SQL DELETE
语句来删除表中的一行或多行。
SQL DELETE 语句简介
若要从表中删除一行或多行,可以使用 DELETE
语句。DELETE
语句的常规语法如下
DELETE
FROM
table_name
WHERE
condition;
Code language: SQL (Structured Query Language) (sql)
首先,提供想要从中删除行的表的名称。
其次,在 WHERE
子句中指定条件以识别需要删除的行。如果您省略 WHERE
子句,则将删除表中的所有行。因此,您应始终谨慎使用 DELETE
语句。
一般而言,DELETE
语句不会像 SELECT
语句一样返回结果集。但是,它确实返回已删除的行数。
SQL DELETE 语句示例
我们将使用 employees
和 dependents
表来演示 DELETE
语句。

SQL DELETE 表中的单行
假设员工 ID 为 105 的 David 想要从其家属列表中删除 Fred。我们知道 Fred
的家属 ID 为 16,因此我们使用以下 DELETE
语句从 dependents
表中删除 Fred。
DELETE FROM dependents
WHERE
dependent_id = 16;
Code language: SQL (Structured Query Language) (sql)
由于 WHERE
子句包含标识 Fred 的 主键 表达式,因此 DELETE
语句仅删除一行。
您可以通过使用以下语句来验证家属 ID 为 16 的行是否已删除
SELECT
COUNT(*)
FROM
dependents
WHERE
dependent_id = 16;
Code language: SQL (Structured Query Language) (sql)

SQL DELETE 多行示例
若要删除表中的多行,请在 WHERE
子句中使用条件来标识应该删除的行。例如,以下语句使用 IN
运算符来包括 ID 为 100、101 或 102 的员工的家属。
DELETE FROM dependents
WHERE
employee_id IN (100 , 101, 102);
Code language: SQL (Structured Query Language) (sql)
SQL DELETE 相关表中的行
一名员工可能有零名或多名家属,而一名家属仅属于一名员工。dependents
表中的 employee_id
列链接到 employees
表中的 employee_id
列。
employees
表和 dependents
表之间的关系是一对多。
从逻辑上讲,家属不能在不参考任何员工的情况下存在。换句话说,当您删除一名员工时,他的或她的家属也必须被删除。
例如,若要删除员工 ID 192 及其所有家属,您需要执行两个 DELETE
语句,如下所示
DELETE
FROM
employees
WHERE
employee_id = 192;
DELETE
FROM
dependents
WHERE
employee_id = 192;
Code language: SQL (Structured Query Language) (sql)
大多数数据库系统都支持 外键约束,以便当从表中删除一行时,外键表中的行也会自动删除。
因此,当执行以下 DELETE
语句时
DELETE
FROM
employees
WHERE
employee_id = 192;
Code language: SQL (Structured Query Language) (sql)
所有 employee_id
为 192 的行也会自动删除。
若要更高效地从表中删除所有行,请使用 TRUNCATE TABLE
语句,而不是使用不带 WHERE
子句的 DELETE
语句。
现在,您应该了解 SQL DELETE
语句,以及如何应用它来删除表中的一行或多行。