SQL DELETE FROM 语法及示例 – wiki基地


SQL DELETE FROM 语法及示例详解

在关系型数据库中,DELETE FROM 语句是数据操作语言(DML)的一部分,用于从表中删除一个或多个现有记录(行)。它是数据库管理中一个非常重要的操作,因为它允许用户精确控制哪些数据应该从数据库中移除。

1. 基本语法

DELETE FROM 语句的最基本形式用于删除表中的所有记录。

语法:

sql
DELETE FROM table_name;

说明:

  • DELETE FROM 是关键字,表示要从指定表中删除数据。
  • table_name 是你希望从中删除记录的表的名称。

示例 1: 删除表中的所有记录

假设我们有一个名为 Products 的表,其中包含以下数据:

ProductID ProductName Price Stock
1 Laptop 1200 50
2 Mouse 25 200
3 Keyboard 75 150

要删除 Products 表中的所有记录,可以使用:

sql
DELETE FROM Products;

执行此语句后,Products 表将变为空表,不再包含任何记录。

重要提示:
在生产环境中,极少会直接使用不带 WHERE 子句的 DELETE FROM 语句,因为它会清空整个表的数据。如果需要清空整个表并重置自增 ID,通常会考虑使用 TRUNCATE TABLE 命令,它通常更快且不记录单个行删除日志(但这是另一个话题)。

2. 使用 WHERE 子句删除特定记录

在大多数情况下,你需要删除的是满足特定条件的记录,而不是所有记录。这时就需要使用 WHERE 子句。

语法:

sql
DELETE FROM table_name
WHERE condition;

说明:

  • WHERE 子句用于指定删除操作的条件。只有满足 condition 的行才会被删除。
  • condition 可以是任何有效的 SQL 表达式,例如比较运算符 (=, >, <, >=, <=, <>), 逻辑运算符 (AND, OR, NOT), LIKE (模式匹配), IN (列表中包含), BETWEEN (在范围内) 等。

示例 2: 删除满足单个条件的记录

假设 Products 表中有以下数据:

ProductID ProductName Price Stock
1 Laptop 1200 50
2 Mouse 25 200
3 Keyboard 75 150
4 Monitor 300 80
5 USB Drive 15 300

要删除 ProductName 为 ‘Mouse’ 的产品:

sql
DELETE FROM Products
WHERE ProductName = 'Mouse';

执行后,Products 表变为:

ProductID ProductName Price Stock
1 Laptop 1200 50
3 Keyboard 75 150
4 Monitor 300 80
5 USB Drive 15 300

示例 3: 删除满足多个条件的记录 (使用 AND)

要删除 Price 大于 100 且 Stock 小于 60 的产品:

sql
DELETE FROM Products
WHERE Price > 100 AND Stock < 60;

执行后,只有 Laptop (ProductID = 1) 会被删除。

示例 4: 删除满足多个条件的记录 (使用 OR)

要删除 Stock 小于 50 或 Price 小于 20 的产品:

sql
DELETE FROM Products
WHERE Stock < 50 OR Price < 20;

执行后,USB Drive (Price < 20) 将被删除(如果 Laptop 被删除,Stock < 50 就不存在了)。

示例 5: 使用 IN 子句删除

要删除 ProductID 为 3 或 5 的产品:

sql
DELETE FROM Products
WHERE ProductID IN (3, 5);

3. 删除操作的注意事项

  1. 谨慎操作: DELETE FROM 是一个破坏性操作。一旦数据被删除,如果不进行数据库恢复(从备份或事务日志),通常是无法找回的。在执行删除操作之前,务必仔细检查 WHERE 子句,确保你删除的是正确的记录。
  2. 事务管理: 在许多数据库系统中,DELETE FROM 操作是支持事务的。这意味着你可以在一个事务中执行删除操作,并在确认无误后提交 (COMMIT),或者在发现错误时回滚 (ROLLBACK),撤销所有操作。这是一个非常重要的安全机制。
    sql
    START TRANSACTION; -- 或 BEGIN TRANSACTION;
    DELETE FROM Products
    WHERE ProductID = 1;
    -- 检查删除结果...
    COMMIT; -- 如果一切正常,提交更改
    -- ROLLBACK; -- 如果有问题,撤销更改
  3. 外键约束: 如果你尝试删除的记录在其他表中作为外键被引用,并且外键约束设置为 RESTRICTNO ACTION,那么删除操作将会失败,直到你先删除或更新引用该记录的其他表中的数据。如果外键约束设置为 CASCADE,那么删除父表中的记录会自动删除所有引用它的子表中的记录。务必了解你的数据库中的外键约束行为。
  4. 性能: 对于大型表,不带 WHERE 子句的 DELETE FROM 可能比 TRUNCATE TABLE 慢,因为它会记录每一行的删除操作。而 TRUNCATE TABLE 通常是 DDL 操作,它通过释放表的存储空间来工作,并且不能回滚。
  5. 权限: 执行 DELETE FROM 语句需要相应的数据库权限。通常是 DELETE 权限。

总结

DELETE FROM 语句是 SQL 中用于移除数据的核心工具。通过熟练掌握其基本语法和 WHERE 子句的使用,你可以精确地控制数据库中的数据,同时通过事务管理和对外键约束的理解,确保数据操作的安全性和完整性。在执行任何删除操作时,始终秉持谨慎的态度是最佳实践。


滚动至顶部