MySQL DELETE 查询:如何从表中删除一行
⚡ 智能摘要
MySQL DELETE 查询从表中删除不再需要的行,并返回受影响的行数。本资源解释了 DELETE 语法、WHERE 筛选、使用 IN 进行多行删除,以及更安全的替代方法 TRUNCATE 和 DROP。

什么是 DELETE 查询?
此 MySQL 删除 DELETE 语句用于从数据库表中删除不再需要的行。它会从表中删除整行,并返回已删除行的计数。当您需要从数据库中清除临时数据或过时数据时,DELETE 语句非常有用。
DELETE 查询 MySQL 一次执行即可从表中删除多行。当需要从数据库表中删除大量行时,此功能非常有利。
一旦删除某行数据,就无法恢复。因此,在删除数据之前务必备份数据库,以便在需要时可以恢复和查看数据库。
如何删除一行 MySQL
既然语句的目的已经明确,下一步就是语法。要删除一行,请执行以下操作: MySQL,使用 DELETE FROM 语句:
DELETE FROM `table_name` [WHERE condition];
位置:
- 从 `table_name` 中删除 讲述了 MySQL 服务器从指定表中删除行。
- [WHERE 条件] 是可选的,用于应用过滤器,以限制 DELETE 查询影响的行数。
如果 WHERE 子句 不用于 MySQL 删除查询,然后 所有 指定表中的行将被删除。
⚠️警告: 首先以 SELECT 语句运行筛选器。如果它返回的正是您想要删除的行,则执行相应的 DELETE 语句是安全的。完整的语法文档请参见[此处]。 MySQL 删除语句手册.
示例 MySQL 删除查询
下一节将构建一个小型数据集,然后从中删除数据。
步骤 1:插入示例数据
在更详细地讨论 SQL DELETE 语句之前,让我们先向 movies 表中插入一些示例数据以供参考。
INSERT INTO `movies` (`title`, `director`, `year_released`, `category_id`) VALUES ('The Great Dictator', 'Charlie Chaplin', 1940, 7); INSERT INTO `movies` (`title`, `director`, `category_id`) VALUES ('sample movie', 'Anonymous', 8); INSERT INTO `movies` (`title`, `director`, `year_released`, `category_id`) VALUES ('movie 3', 'John Brown', 1920, 8);
执行上述脚本会将三 (3) 部电影添加到电影表中。在继续之前,让我们先列出表中的所有电影。
SELECT * FROM `movies`;
执行上述脚本后,我们将得到以下结果。新插入的三行数据已高亮显示。
| 电影 ID | 标题 | 导向器 | 发行年份 | 类别编号 |
|---|---|---|---|---|
| 1 | 加勒比海盗4 | 罗伯·马歇尔 | 2011 | 1 |
| 2 | 忘掉莎拉·马歇尔 | 尼古拉斯·斯托勒 | 2008 | 2 |
| 3 | X-战警 | 无 | 2008 | 无 |
| 4 | Code 黑 | 埃德加·吉姆斯 | 2010 | 无 |
| 5 | 爸爸的小女孩 | 无 | 2007 | 8 |
| 6 | 天使与魔鬼 | 无 | 2007 | 6 |
| 7 | 达芬奇 Code | 无 | 2007 | 6 |
| 9 | Honey moonERS | 约翰舒尔茨 | 2005 | 8 |
| 16 | 67% 有罪 | 无 | 2012 | 无 |
| 18 | 大独裁者 | 查理·卓别林 | 1940 | 7 |
| 19 | 样片 | 匿名 | 无 | 8 |
| 20 | 电影3 | 约翰·布朗 | 1920 | 8 |
步骤 2:删除单行
假设 Myflix 视频库不再出租电影《大独裁者》,并希望将其从数据库中删除。该电影的 ID 为 18,因此以下脚本会删除该行。
DELETE FROM `movies` WHERE `movie_id` = 18;
在以下位置执行上述脚本 MySQL 工作台 针对 Myflix 数据库,从表中删除 ID 为 18 的电影。
现在让我们来检查一下电影表的当前状态。
SELECT * FROM `movies`;
| 电影 ID | 标题 | 导向器 | 发行年份 | 类别编号 |
|---|---|---|---|---|
| 1 | 加勒比海盗4 | 罗伯·马歇尔 | 2011 | 1 |
| 2 | 忘掉莎拉·马歇尔 | 尼古拉斯·斯托勒 | 2008 | 2 |
| 3 | X-战警 | 无 | 2008 | 无 |
| 4 | Code 黑 | 埃德加·吉姆斯 | 2010 | 无 |
| 5 | 爸爸的小女孩 | 无 | 2007 | 8 |
| 6 | 天使与魔鬼 | 无 | 2007 | 6 |
| 7 | 达芬奇 Code | 无 | 2007 | 6 |
| 9 | Honey moonERS | 约翰舒尔茨 | 2005 | 8 |
| 16 | 67% 有罪 | 无 | 2012 | 无 |
| 19 | 样片 | 匿名 | 无 | 8 |
| 20 | 电影3 | 约翰·布朗 | 1920 | 8 |
注意:
- 查询结果集中不再返回 ID 为 18 的电影。
- 你不能使用 DELETE 语句从表中删除单个列。该语句会删除整行。要清除单个字段,请使用其他方法。 更新查询 这会将该列的值设置为 NULL。
步骤 3:删除包含 IN 的多行
假设我们有一个想要删除的电影列表。与其为每一行运行一条语句,我们可以将 WHERE 子句与 IN 运算符结合使用。
DELETE FROM `movies` WHERE `movie_id` IN (20,21);
执行上述脚本会一次性从我们的电影表中删除 ID 为 20 和 21 的电影。
DELETE、TRUNCATE 和 DROP 在 MySQL
DELETE 并不是从数据库中删除数据的唯一方法。 MySQL初学者常常会在更快捷的命令更合适的时候选择它,因此下表对这三个删除命令进行了比较。
| 特性 | 删除 | 截短 | 下降 |
|---|---|---|---|
| 命令类型 | DML | DDL | DDL |
| WHERE 子句 | 支持 | 不支持 | 不支持 |
| 移除的内容 | 选定行 | 所有行 | 行和表格结构 |
| 回滚 | 交易内部可能发生 | 不可能(隐式提交) | 不可能(隐式提交) |
| 自动递增 | 计数器保留 | 计数器重置为初始值 | 柜台随桌子一起被移走了。 |
| 大型赌桌上的速度 | 慢速(逐行) | 速度非常快 | 速度非常快 |
当您需要筛选或回滚操作时,请使用 DELETE 键。 TRUNCATE TABLE 当您需要快速清空表并重置其 AUTO_INCREMENT 计数器时,请使用 DROP 语句。仅当不再需要该表时才使用 DROP 语句,因为它会连同数据一起删除表定义。
