12月阅读周·MySQL数据库入门:数据库操作之DELETE删除全部数据篇
背景
去年下半年,我在微信书架里加入了许多技术书籍,各种类别的都有,断断续续的读了一部分。
没有计划的阅读,收效甚微。
新年伊始,我准备尝试一下其他方式,比如阅读周。每月抽出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畅想》等系列作者。华夏美食、国漫、古风重度爱好者,刑侦、无限流小说初级玩家。
如果看完文章有所收获,欢迎点赞👍 | 收藏⭐️ | 留言📝。
- 点赞
- 收藏
- 关注作者
评论(0)