SQL DELETE

概要:在本教程中,您将学习如何使用 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 语句示例

我们将使用 employeesdependents 表来演示 DELETE 语句。

employees_dependents_tables

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 one row example

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 语句,以及如何应用它来删除表中的一行或多行。

本教程是否有用?