测试账号、过期临时数据或业务规则不再需要的记录,可以用 DELETE 从 Table 移除。它会真正改变数据库,成功后相关 Row 不再存在,因此必须比普通查询更加谨慎。
DELETE FROM users 指定目标 Table,WHERE id = 4 决定移除 Diana 这一条 Row。
DELETE FROM users
WHERE id = 4;忘记 WHERE 会删除所有 Row
DELETE FROM users; 通常不会删除 users 的结构,却会清空其中所有数据。它与带 WHERE id = 4 的语句只差一个条件,结果却完全不同。执行 DELETE 前,先检查 WHERE。
先 SELECT,再 DELETE
使用相同条件先查询。若 SELECT * FROM users WHERE city = 'Tokyo'; 返回 Alice 和 Chris,那么对应 DELETE 会同时移除两人。查询结果不符合预期时,应先修正条件。
DELETE 可以移除多条 Row
WHERE price < 20 会删除所有低于 20 的商品。AND、OR、IN 和 BETWEEN 也能用于 DELETE,只是结果具有破坏性,所以要更认真检查范围。
删除 Row 不等于删除 Table
DELETE 移除数据但保留表结构。DROP TABLE 会同时删除结构与数据,危险程度更高,两者不是同一种操作。
关系可能阻止删除
若 orders.user_id 仍引用 Alice 的 users.id,数据库可能拒绝删除 Alice,避免订单失去有效用户。具体行为由 Foreign Key 和业务设计决定。
Soft Delete
真实系统的“删除账号”可能只是把 is_deleted 改为 true 或写入 deleted_at。Row 仍在,只是不再作为正常数据展示。这称为 软删除(Soft Delete);真正的 DELETE 常称物理或硬删除。
删除后再次查询原条件,并查看工具报告的 affected rows。目标查询为空且数量符合预期,才形成完整验证。
| 语句 | Table 结构 | Table 中的 Row |
|---|---|---|
DELETE FROM users; | 保留 | 全部删除 |
DROP TABLE users; | 删除 | 随结构一起删除 |
删除一条、多条或全部 Row
被删除的 Row 会从模拟表中真实消失。依次比较精确 WHERE、宽条件和无 WHERE,重置可恢复。
| id | name | city | |
|---|---|---|---|
| 1 | Alice | [email protected] | Tokyo |
| 2 | Bob | [email protected] | Osaka |
| 3 | Chris | [email protected] | Tokyo |
| 4 | Diana | [email protected] | Kyoto |
沙盒已准备好,不会连接真实数据库。知识测验
预览并删除目标 Row
删除 Electronics 类别中价格低于 50 的商品。先写 SELECT 预览,再写 DELETE,最后用原条件验证。按给定数据说明将删除哪个商品和预期 affected rows。不得使用无 WHERE 的 DELETE。
可选:通用练习数据
DROP TABLE IF EXISTS products;
CREATE TABLE products (id INTEGER, name VARCHAR(100), price DECIMAL(10,2), category VARCHAR(50));
INSERT INTO products VALUES
(1,'Keyboard',80.00,'Electronics'), (2,'Mouse',40.00,'Electronics'),
(3,'Coffee Mug',15.00,'Home'), (4,'Backpack',60.00,'Fashion');