Skip to content

sql-delete-query

SQL DELETE 语句用于从表中删除现有记录。

就像 UPDATE 语句一样,你必须使用 WHERE 子句来指定要删除的行。如果你省略 WHERE 子句,表中的所有记录都将被删除!

DELETE 语句的基本语法是:

DELETE FROM table_name
WHERE condition;

WHERE 子句标识要删除的特定行。

使用我们的 Customers(客户)表:

+----+----------+-----+-------------+----------+
| ID | Name | Age | City | Salary |
+----+----------+-----+-------------+----------+
| 1 | Ramesh | 32 | Ahmedabad | 2000.00 |
| 2 | Khilan | 25 | Delhi | 1500.00 |
| 3 | Kaushik | 23 | Kota | 2000.00 |
| 4 | Chaitali | 25 | Mumbai | 6500.00 |
| 5 | Hardik | 27 | Bhopal | 8500.00 |
| 6 | Komal | 22 | Hyderabad | 4500.00 |
| 7 | Muffy | 24 | Indore | 10000.00 |
+----+----------+-----+-------------+----------+

以下查询将删除 ID 为 6 的客户。

DELETE FROM Customers
WHERE ID = 6;

此操作后,‘Komal’ 的行将从表中永久删除。

+----+----------+-----+-------------+----------+
| ID | Name | Age | City | Salary |
+----+----------+-----+-------------+----------+
| 1 | Ramesh | 32 | Ahmedabad | 2000.00 |
| 2 | Khilan | 25 | Delhi | 1500.00 |
| 3 | Kaushik | 23 | Kota | 2000.00 |
| 4 | Chaitali | 25 | Mumbai | 6500.00 |
| 5 | Hardik | 27 | Bhopal | 8500.00 |
| 7 | Muffy | 24 | Indore | 10000.00 |
+----+----------+-----+-------------+----------+

要删除表中的所有记录,你可以省略 WHERE 子句。然而,对于大型表,此操作可能很慢且占用大量资源。

-- 警告:这将删除表中的所有行。
DELETE FROM Customers;

对于删除所有记录,TRUNCATE TABLE 命令几乎总是一个更好的选择。它速度更快,使用的系统资源更少,并会重置任何自增列。有关详细比较,请参阅 TRUNCATE TABLE 章节。

DELETE 是一种破坏性操作。在运行 DELETE 查询之前,特别是在生产环境中,请注意以下几点:

  1. 始终进行备份。
  2. 使用具有相同 WHERE 子句的 SELECT 语句 来确认将要删除哪些行。这是至关重要的验证步骤。
  3. 使用事务。 将你的 DELETE 操作包装在 BEGIN TRANSACTION 块中。这允许你在出现错误时进行 ROLLBACK(回滚)删除操作。
-- 步骤 1:验证即将删除的数据
SELECT * FROM Customers WHERE Age > 30;
-- 步骤 2:在事务中执行删除操作
BEGIN TRANSACTION;
DELETE FROM Customers WHERE Age > 30;
-- 您可以在此处执行其他检查。
-- 如果一切正确,则提交。
-- COMMIT;
-- 如果出现问题,则撤销。
-- ROLLBACK;