12月阅读周·MySQL数据库入门:数据库操作之DELETE删除全部数据篇

举报
叶一一 发表于 2024/12/25 09:43:40 2024/12/25
【摘要】 背景去年下半年,我在微信书架里加入了许多技术书籍,各种类别的都有,断断续续的读了一部分。没有计划的阅读,收效甚微。新年伊始,我准备尝试一下其他方式,比如阅读周。每月抽出1~2个非连续周,完整阅读一本书籍。这个“玩法”虽然常见且板正,但是有效,已经坚持阅读十一个月。已读完书籍:《架构简洁之道》、《深入浅出的Node.js》、《你不知道的JavaScript(上卷)》、《你不知道的JavaScr...

背景

去年下半年,我在微信书架里加入了许多技术书籍,各种类别的都有,断断续续的读了一部分。

没有计划的阅读,收效甚微。

新年伊始,我准备尝试一下其他方式,比如阅读周。每月抽出1~2个非连续周,完整阅读一本书籍。

这个“玩法”虽然常见且板正,但是有效,已经坚持阅读十一个月。

已读完书籍《架构简洁之道》、《深入浅出的Node.js》、《你不知道的JavaScript(上卷)》、《你不知道的JavaScript(中卷)》、《你不知道的JavaScript(下卷)》、《数据结构与算法JavaScript描述》、《WebKit技术内幕》、《前端架构:从入门到微前端》、《秒懂算法:用常识解读数据结构与算法》、《JavaScript权威指南》、《JavaScript异步编程设计快速响应的网络应用》、《编写可测试的JavaScript代码

当前阅读周书籍MySQL数据库入门

DELETE删除全部数据

删除数据是指对表中存在的记录进行删除,这是数据库的常见操作,比如一个学生转学了,就需要在student表中将其信息记录删除。MySQL中使用DELETE语句来删除表中的记录,其语法格式如下所示:

DELETE FROM 表名 [WHERE 条件表达式]

在上面的语法格式中,“表名”指定要执行删除操作的表,[WHERE条件表达式]为可选参数,用于指定删除的条件,满足条件的记录会被删除。DELETE语句可以删除表中的部分数据和全部数据。

在DELETE语句中如果没有使用WHERE子句,则会将表中的所有记录都删除。

【例1-1】  删除student表中的所有记录,在删除数据之前首先使用查询语句查看student表中的所有记录,执行结果如下所示:

mysql>SELECT * FROM student;
+------+---------+-------+
| id    | name     |grade |
+------+---------+-------+
|     1  | caocao   |    80  |
|     2  | lisi     |    80  |
|     3  | wangwu   |    80 |
|     4  | zhaoliu  |    80 |
| NULL | sunbin   |    80 |
|     5  | boya     |     80 |
+------+---------+-------+
6 rows in set (0.00 sec)

从查询结果可以看出,student表中还有6条记录,下面使用DELETE语句将这6条记录全部删除,DELETE语句如下所示:

DELETE FROM student;

执行DELETE语句删除student表中的数据,然后再次通过查询语句查看student表中的记录,执行结果如下所示:

mysql>SELECT * FROM student;
Empty set (0.00 sec)

从查询结果可以看到记录为空,说明表中所有的记录被成功删除。 多学一招:使用关键字TRUNCATE删除表中数据 在MySQL数据库中,还有一种方式可以用来删除表中所有的记录,这种方式需要用到一个关键字TRUNCATE,其语法格式如下:

TRUNCATE [TABLE] 表名

TRUNCATE的语法格式很简单,只需要通过“表名”指定要执行删除操作的表即可。下面通过一个案例来演示TRUNCEATE的用法。

【例1-2】   在数据库chapter03中创建一张表tab_truncate,创建tab_truncate表的SQL语句如下所示:

CREATE TABLE tab_truncate(
    id INT(3) PRIMARY KEY AUTO_INCREMENT,
    name VARCHAR(4)
);

在创建的tab_truncate表中,id字段值设置了AUTO_INCREMENT,在每次添加记录时系统会为该字段自动添加值,id字段的默认初始值是1,每添加一条记录,该字段值会自动加1。接下来向tab_truncate表中添加5条记录,且只添加name字段的值,SQL语句如下所示:

INSERT INTO tab_truncate(name)
VALUES('A'),('B'),('C'),('D'),('E');

执行INSERT语句向tab_truncate表中添加5条记录,接下来通过查询语句查看数据是否成功添加,执行结果如下所示:

mysql>SELECT * FROM tab_truncate;
+----+------+
| id | name |
+----+------+
|  1  |    A    |
|  2  |    B    |
|  3 |    C  |
|  4  |    D    |
|  5  |    E    |
+----+------+
5 rows in set (0.00 sec)

从查询结果可以看出,tab_truncate表中添加了5条记录,且系统自动为每条记录的id字段添加了值。接下来使用TRUNCATE语句删除tab_truncate表中的所有记录,TRUNCATE语句如下所示:

TRUNCATE TABLE tab_truncate;

执行结果如下所示:

mysql>TRUNCATE TABLE tab_truncate;
Query OK, 0 rows affected (0.02 sec)

从执行结果可以看到TRUNCATE语句成功执行,接下来通过查询语句查看tab_truncate表中的记录是否删除成功,执行语句如下所示:

mysql>SELECT * FROM tab_truncate;
Empty set (0.00 sec)

通过查询结果可以看到记录为空,说明tab_truncate表中的记录被全部删除了。 TRUNCATE语句和DETELE语句都能实现删除表中的所有数据的功能,但两者也有一定的区别,下面就针对两者的区别进行说明。

(1)DELETE语句是DML语句,TRUNCATE语句通常被认为是DDL语句。

(2)DELETE语句后面可以跟WHERE子句,通过指定WHERE子句中的条件表达式只删除满足条件的部分记录,而TRUNCATE语句只能用于删除表中的所有记录。

(3)使用TRUNCATE语句删除表中的数据后,再次向表中添加记录时,自动增加字段的默认初始值重新由1开始,而使用DELETE语句删除表中所有记录后,再次向表中添加记录时,自动增加字段的值为删除时该字段的最大值加1。

【例1-3】在空表tab_truncate中,重新添加5条记录,SQL语句如下:

INSERT INTO tab_truncate(name)
VALUES('F'),('G'),('H'),('I'),('J');

执行INSERT语句向tab_truncate表中添加5条记录,使用查询语句查看表中的记录,执行结果如下所示:

mysql>SELECT * FROM tab_truncate;
+----+------+
| id | name |
+----+------+
|  1  |   F    |
|  2  |   G    |
|  3  |   H    |
|  4  |   I    |
|  5  |   J    |
+----+------+
5 rows in set (0.00 sec)

从查询结果可以看出,系统为tab_truncate表中id字段默认添加了值,初始值从1开始。接下来使用DELETE语句删除tab_truncate表中的所有记录,DELETE语句如下所示:

DELETE FROM tab_truncate;

执行DELETE语句删除tab_truncate表中全部记录,然后向表中添加一条新记录,SQL语句如下所示:

INSERT INTO tab_truncate(name) VALUES('K');

执行INSERT语句向tab_truncate表中添加一条记录,再次使用查询语句查看表中的记录,SQL语句如下所示:

mysql>SELECT * FROM tab_truncate;
+----+------+
| id | name |
+----+------+
|  6 |   K  |
+----+------+
1 row in set (0.00 sec)

从查询结果可以看到,新添加记录的id字段为6,这是因为在使用DELETE语句删除的5条记录中,id字段的最大值为5,因此再次添加记录时,新记录的id字段值就为5+1。

(4)使用DELETE语句时,每删除一条记录都会在日志中记录,而使用TRUNCATE语句时,不会在日志中记录删除的内容,因此TRUNCATE语句的执行效率比DELETE语句高。

总结

DELETE语句可以删除表中的部分数据和全部数据。

在DELETE语句中如果没有使用WHERE子句,则会将表中的所有记录都删除。


作者介绍
非职业「传道授业解惑」的开发者叶一一。
《趣学前端》、《CSS畅想》等系列作者。华夏美食、国漫、古风重度爱好者,刑侦、无限流小说初级玩家。
如果看完文章有所收获,欢迎点赞👍 | 收藏️ | 留言📝

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。