数据库-mysql-删除(DROP+TRUNCATE+DELETE)

这里的删除分为:

  1. 删除表中的部分数据
  2. 删除表的所有数据:下次添加数据前不需要新建表
  3. 同时删除表的数据和表的定义:下次添加数据之前必须新建表

主要关键词有:TRUNCATE DROP DELETE

下面按删除类型介绍操作语句:

删除一行或部分行

1.DELETE FROM 表 WHERE 字段 = 值:选择性地删除一行

有趣的是,MySQL对DELETE语句添加了标准SQL语句没有的一些功能:

2.DELETE FROM 表 WHERE 字段 = 值 LIMIT 数量:当WHERE过滤结果有多个时删除前面的几个,即删除过滤结果中的部分数据

如果上述语句2对删除部分结果的排序标准不明确可以使用ORDER BY指定排序字段,再使用LIMIT限制删除部分数据:

3.DELETE FROM 表 WHERE 字段 = 值 ORDER BY 排序字段 LIMIT 数量:由小到大

4.DELETE FROM 表 WHERE 字段 = 值 ORDER BY 排序字段 DESC LIMIT 数量:由大到小

删除一列

UPDATE

删除所有行但保留表的定义

1.DELETE FROM 表:返回被删除的记录数,自增字段起始值恢复为1

2.TRUNCATE TABLE 表:不返回被删除的记录数,自增字段起始值恢复为1

3.DELETE FROM 表 WHERE true:返回被删除的记录数,自增字段起始值不变

注意:

  • 语句3由于加了WHERE将进行逐行扫描(尽管不进行WHERE判断),而语句1直接删除所有数据就好了,所以语句3的执行成本高于语句1
  • 语句2相对于语句1虽然不能返回被删除的记录数,但是非常快

删除指定表(包括内容和定义)

DROP TABLE 表

删除指定数据库的所有表数据(保留结构)

首先要能遍历到所有表:SELECT TABLE_NAME FROM information_schema.TABLES WHERE TABLE_SCHEMA=’数据库名’

然后我们使用内置连接语句CONCAT生成多个命令:

SELECT CONCAT(‘TRUNCATE TABLE ‘, TABLE_NAME, ‘;’) FROM information_schema.TABLES WHERE TABLE_SCHEMA=’数据库名’:注意TRUNCATE TABLE后面留一个空格

其他

DROP、DELETE、TRUNCATE的适用情况

----- For reprint please indicate the source -----
0%