delete、drop、truncate的区别和用法

    delete、drop、truncate三者都是删除数据库的语句,我们经常使用的就是delete和drop,虽然都是删除数据库数据的操作,但是其中也有很大区别。

1.drop

drop可以作用与数据库,也可以作用与表。对表而言,drop是将表中数据和表结构一起删除

下面我举一个例子能更直观的说明。

mysql> select * from table_stu;     #现在有一个数据表
+---------+----------+------------+---------+-------------+-------------+-------------+
| stu_num | stu_name | stu_gender | stu_age | stu_tel     | stu_remark  | stu_qq      |
+---------+----------+------------+---------+-------------+-------------+-------------+
| 1       | 张三     | 男         |      21 | 19891113793 | 12345678910 | 12345678910 |
| 3       | 王       | 男         |      15 | 911010101   | 911020202   | 911030303   |
+---------+----------+------------+---------+-------------+-------------+-------------+

mysql> desc table_stu;              #查看这个数据表的结构
+------------+--------------+------+-----+---------+-------+
| Field      | Type         | Null | Key | Default | Extra |
+------------+--------------+------+-----+---------+-------+
| stu_num    | char(8)      | NO   |     | NULL    |       |
| stu_name   | varchar(20)  | NO   |     | NULL    |       |
| stu_gender | char(2)      | NO   |     | NULL    |       |
| stu_age    | int          | NO   |     | NULL    |       |
| stu_tel    | char(11)     | NO   |     | NULL    |       |
| stu_remark | varchar(200) | YES  |     | NULL    |       |
| stu_qq     | varchar(11)  | YES  |     | NULL    |       |
+------------+--------------+------+-----+---------+-------+
7 rows in set (0.01 sec)

mysql> drop table table_stu;          #使用drop删除该数据表
Query OK, 0 rows affected (0.01 sec)

mysql> select * from table_stu;       #查看数据表数据,显示数据表不存在
ERROR 1146 (42S02): Table 'new_first.table_stu' doesn't exist

 
mysql> desc table_stu;                #查看表结构,也是显示数据表不存在
ERROR 1146 (42S02): Table 'new_first.table_stu' doesn't exist

2.truncate

        truncate我们不经常使用,他的作用是清空表,或者是截断表,并且只能作用与表。它是删除表的数据,不会删除表结构。

mysql> select * from new_table;        #查看表数据
+----------+--------------------------+-----------+--------------+-----------+
| cs_id    | cs_name                  | cs_credit | cs_type      | cs_depart |
+----------+--------------------------+-----------+--------------+-----------+
|  5200313 | 数据库原理及应用         |         4 | 核心专业     | 信工      |
|  5203314 | 计算机导论               |         4 | 通识教育     | 信工      |
|  5219314 | 数据结构                 |         5 | 专业核心     | 信工      |
|  5223013 | 大学物理                 |         4 | 专业基础     | 信工      |
|  5227614 | 毕业实习                 |         4 | 集中实践     | 信工      |
|  5230912 | 云计算                   |         2 | 共同选修     | 信工      |
|  5236212 | 机器学习                 |         2 | 共同选修     | 信工      |
|  5237514 | c语言                    |         4 | 专业基础     | 信工      |
|  5245112 | 区块链                   |         2 | 任意选修     | 信工      |
|  7200422 | 知识产权法               |         2 | 任意选修     | 文法      |
| 20201833 | 概率论                   |         3 | 专业基础     | 基础      |
| 20202336 | 高等数学                 |         6 | 专业基础     | 基础      |
| 29299131 | 劳动教育                 |         1 | 集中实践     | 学务      |
+----------+--------------------------+-----------+--------------+-----------+
13 rows in set (0.00 sec)

mysql> desc new_table;                #查看表结构
+-----------+------------------+------+-----+---------+-------+
| Field     | Type             | Null | Key | Default | Extra |
+-----------+------------------+------+-----+---------+-------+
| cs_id     | int              | NO   |     | NULL    |       |
| cs_name   | varchar(50)      | NO   |     | NULL    |       |
| cs_credit | tinyint unsigned | YES  |     | NULL    |       |
| cs_type   | char(12)         | YES  |     | NULL    |       |
| cs_depart | char(6)          | YES  |     | NULL    |       |
+-----------+------------------+------+-----+---------+-------+
5 rows in set (0.00 sec)

mysql> truncate table new_table;      #使用truncate方法删除表
Query OK, 0 rows affected (0.03 sec)

mysql> select * from new_table;       #查看表数据,发现显示为空
Empty set (0.00 sec)

mysql> desc new_table;                #但是查看表结构,显示表结构与删除之前没有变化
+-----------+------------------+------+-----+---------+-------+
| Field     | Type             | Null | Key | Default | Extra |
+-----------+------------------+------+-----+---------+-------+
| cs_id     | int              | NO   |     | NULL    |       |
| cs_name   | varchar(50)      | NO   |     | NULL    |       |
| cs_credit | tinyint unsigned | YES  |     | NULL    |       |
| cs_type   | char(12)         | YES  |     | NULL    |       |
| cs_depart | char(6)          | YES  |     | NULL    |       |
+-----------+------------------+------+-----+---------+-------+
5 rows in set (0.00 sec)

3.delete

        使用delete删除数据时,虽然也是删除表的数据,但是其中大有门道,它是一行一行的删除数据,效率远不如truncate。

        我们同样举例说明:

mysql> select * from stu;             #查看表数据
+--------------+-----------+---------+---------+-----------+--------------+
| stu_id       | stu_name  | stu_sex | stu_age | stu_major | stu_college  |
+--------------+-----------+---------+---------+-----------+--------------+
| 201804550101 | 郭奎      | 男      |      22 | 计科      | 信工学院     |
| 201804550102 | 吕宇航    | 男      |      18 | 计科      | 信工学院     |
| 201804550103 | 张豪辉    | 女      |      19 | 计科      | 信工学院     |
| 201804550107 | 丁志杰    | 男      |      17 | 金融学    | 金贸学院     |
| 201804550109 | 范伟      | 男      |      19 | 金融学    | 金贸学院     |
| 201804550116 | 张依婷    | 女      |      17 | 大数据    | 信工学院     |
| 201804550120 | 张维      | 男      |      19 | 计科      | 信工学院     |
| 201804550121 | 朱柳阳    | 女      |      20 | 计科      | 信工学院     |
| 201804550144 | 谭兵炎    | 男      |      20 | 大数据    | 信工学院     |
| 201804550153 | 杨志强    | 男      |      17 | 大数据    | 信工学院     |
+--------------+-----------+---------+---------+-----------+--------------+
10 rows in set (0.00 sec)

mysql> desc stu;                     #查看表结构
+-------------+-------------------+------+-----+---------+-------+
| Field       | Type              | Null | Key | Default | Extra |
+-------------+-------------------+------+-----+---------+-------+
| stu_id      | bigint unsigned   | NO   |     | NULL    |       |
| stu_name    | char(12)          | NO   |     | NULL    |       |
| stu_sex     | enum('男','女')   | YES  |     | NULL    |       |
| stu_age     | tinyint unsigned  | YES  |     | NULL    |       |
| stu_major   | char(9)           | YES  |     | NULL    |       |
| stu_college | char(12)          | YES  |     | NULL    |       |
+-------------+-------------------+------+-----+---------+-------+
6 rows in set (0.00 sec)

mysql> delete from stu;             #使用delete方法删除表
Query OK, 10 rows affected (0.01 sec)

mysql> select * from stu;           #delete删除后,查看表数据,显示为空
Empty set (0.00 sec)

mysql> desc stu;                    #查看表结构,显示表结构仍然存在
+-------------+-------------------+------+-----+---------+-------+
| Field       | Type              | Null | Key | Default | Extra |
+-------------+-------------------+------+-----+---------+-------+
| stu_id      | bigint unsigned   | NO   |     | NULL    |       |
| stu_name    | char(12)          | NO   |     | NULL    |       |
| stu_sex     | enum('男','女')   | YES  |     | NULL    |       |
| stu_age     | tinyint unsigned  | YES  |     | NULL    |       |
| stu_major   | char(9)           | YES  |     | NULL    |       |
| stu_college | char(12)          | YES  |     | NULL    |       |
+-------------+-------------------+------+-----+---------+-------+
6 rows in set (0.00 sec)

总结

drop,删除整张表,包括表数据和结构。

truncate,删除表中数据,不会删除表结构。(效率高)

delete,删除表数据,不会删除表结构。(一行一行删除,效率低)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值