SQL DELETE 语句

2025年5月16日 | 阅读 7 分钟

SQL DELETE 语句是用于从表中删除行的 数据操纵语言 (DML) 命令。它是数据库中数据操作的重要组成部分。有时我们可能错误地在数据库中输入了错误的数据,有时我们需要从数据库中删除旧数据,以便纠正错误数据,我们可以使用 DELETE 语句来从数据库中删除旧数据。

DELETE 语句通常会从表中删除一个或多个记录。

SQL DELETE Statement

记录可以一次性全部删除,也可以根据特定条件进行选择性删除。这对于清理被废弃或不需要的数据非常有用,可以提高数据库性能并保持数据可靠性。通过在DELETE 语句中使用条件,用户可以有选择地删除特定记录,而不是删除所有数据,并确保只删除过时或不必要的信息,同时排除重要数据。

SQL DELETE 语法

让我们看一下 SQL DELETE 语句的语法。

描述

DELETE FROM:这是一个 SQL 语句,用于删除表中的现有数据。

table_name:table_name 是我们要从中删除数据的表。

WHERE:这是一个 SQL 子句,用于指定我们要从表中删除值的位置。

condition:用于过滤要删除的行。

SQL DELETE 语句示例

为了理解SQL DELETE语句,我们首先创建一个名为TestCricket的表,其中包含Player_Name, Nationality, Run, WicketsAverage字段。我们将使用 CREATE TABLE 语句来创建表。

创建 TestCricket 表

向 TestCricket 表插入值

我们将使用 INSERT INTO 语句将值插入表中。

检索 TestCricket 表

以下查询用于从数据库中检索表:

 
Player_Name国籍运行Wickets平均数
维拉特·科利印度9230046.85
Ricky Ponting澳大利亚13378551.85
Don Bradman澳大利亚6996299.94
Joe Root英格兰129727145.36
KL Rahul印度3257033.57
MS Dhoni印度4876038.09

现在我们将使用上面的表来查看 SQL DELETE 语句的演示。

示例 1:删除单条记录

我们将从TestCricket表中删除一条特定行。要删除特定行,我们将使用WHERE子句并定义条件以仅删除目标行。在此示例中,我们将删除玩家名为Don Bradman的记录。

查询

检索结果表

删除单行后的结果

我们可以注意到Don Bradman这个玩家的记录已从TestCricket表中删除。

Player_Name国籍运行Wickets平均数
维拉特·科利印度9230046.85
Ricky Ponting澳大利亚13378551.85
Joe Root英格兰129727145.36
KL Rahul印度3257033.57
MS Dhoni印度4876038.09

示例 2:删除多条记录

我们将从TestCricket表中删除多行。我们将使用WHERE子句定义一个满足多行的条件。我们将删除平均得分低于 40 的玩家的记录。

查询

检索结果表

删除多行后的结果

我们可以看到所有平均得分低于 40 的玩家都已从表中删除。

Player_Name国籍运行Wickets平均数
维拉特·科利印度9230046.85
Ricky Ponting澳大利亚13378551.85
Joe Root英格兰129727145.36

示例 3:使用 AND 运算符删除多行

我们可以借助 AND 运算符删除表中的多行,该运算符用于组合多个条件。

AND 运算符的作用是检查所有满足所有定义条件的记录。我们将使用WHERE子句中的 AND 运算符并定义多个条件。

让我们考虑上面创建的TestCricket表。

源表

Player_Name国籍运行Wickets平均数
维拉特·科利印度9230046.85
Ricky Ponting澳大利亚13378551.85
Don Bradman澳大利亚6996299.94
Joe Root英格兰129727145.36
KL Rahul印度3257033.57
MS Dhoni印度4876038.09

查询

检索结果表

使用 AND 运算符删除多行后的结果

我们可以看到所有三振数为 0 且得分低于 5000 分的玩家都已从表中删除。

Player_Name国籍运行Wickets平均数
维拉特·科利印度9230046.85
Ricky Ponting澳大利亚13378551.85
Don Bradman澳大利亚6996299.94
Joe Root英格兰129727145.36

示例 4:使用 OR 运算符删除多行

我们可以借助 OR 运算符删除表中的多行,该运算符用于组合多个条件。

OR 运算符的作用是检查所有满足任一已定义条件的记录。我们将使用WHERE子句中的 OR 运算符并提及多个条件。

让我们考虑TestCricket表。

源表

Player_Name国籍运行Wickets平均数
维拉特·科利印度9230046.85
Ricky Ponting澳大利亚13378551.85
Don Bradman澳大利亚6996299.94
Joe Root英格兰129727145.36
KL Rahul印度3257033.57
MS Dhoni印度4876038.09

查询

检索结果表

使用 OR 运算符删除多行后的结果

我们可以看到所有三振数为 0 或得分低于 5000 分的玩家都已从表中删除。

Player_Name国籍运行Wickets平均数
Ricky Ponting澳大利亚13378551.85
Don Bradman澳大利亚6996299.94
Joe Root英格兰129727145.36

示例 5:删除所有记录

如果我们要删除表中的所有记录,则可以删除 WHERE 子句。

查询

检索结果表

删除所有记录后的结果

我们可以看到TestCricket表中的所有记录都已被删除,表现在是空的。

Player_Name国籍运行Wickets平均数
empty

注意:删除特定记录时,请勿忘记添加 WHERE 子句。此子句定义了应删除哪些记录。WHERE 子句用于防止删除表中的所有行;如果您不使用 WHERE 子句,则可能会丢失所有行。

SQL 中的 DELETE 与 TRUNCATE

许多人对 DELETE 和 TRUNCATE 感到困惑,因为它们都可以用于从表中删除数据。DELETE 和 TRUNCATE 的相似之处在于,它们都保持表结构和索引不变。

DELETE

它是一个 DML 命令,用于根据用户提供的条件从表中删除特定数据。

TRUNCATE

它是一个 DDL 命令,用于删除表中的所有数据,并将表重置为空状态。

让我们看看 DELETE 和 TRUNCATE 之间的区别。

DELETETRUNCATE
它删除特定行。它删除所有行。
它是一个 DML 命令。它是一个 DDL 命令。
可以使用 ROLLBACK 在事务中回滚。不能使用 ROLLBACK 在事务中回滚。
它不会将自动递增值重置为其初始状态。它将自动递增值重置为其初始状态。
它比 TRUNCATE 慢,因为它是一行一行地删除。它比 DELETE 快。
它允许使用 WHERE 进行过滤,因为它删除特定数据。它不允许使用 WHERE 进行过滤,因为它一次删除所有行。
这是一个记录的操作,意味着每个删除的行都记录在事务日志中。它不记录单独的行删除。

使用 SQL DELETE 语句前需要记住的要点

  • 始终使用 WHERE 命令,以避免意外删除所有记录。
  • 在使用 DELETE 语句之前,不要忘记备份数据文件。
  • 请记住,在执行 DELETE 语句之前,先使用 SELECT 语句检查将要删除的内容。

结论

SQL DELETE 语句是一个重要的 DML 命令,用于在不更改表结构的情况下从表中删除数据。该命令使我们能够通过在WHERE 子句中使用条件来删除特定行。如果您不使用条件,表中的所有行都将被删除。DELETE 语句比 TRUNCATE 语句慢,但更灵活。我们可以根据提供的条件删除一条、多条或所有记录的数据。


SQL DELETE 语句的主题


下一主题SQL Delete Table