方法1:delete from 表名;

方法2:truncate table 表名;

比  较:
1> truncate 是整体删除 (速度较快),delete是逐条删除 (速度较慢)
2> truncate 不写服务器 log,delete 写服务器 log,也就是 truncate 效率比 delete高的原因
3> truncate 不激活trigger (触发器),但是会重置Identity (标识列、自增字段),相当于自增列会被置为初始值,又重新从1开始记录,而不是接着原来的 ID数。而 delete 删除以后,identity 依旧是接着被删除的最近的那一条记录ID加1后进行记录。如果只需删除表中的部分记录,只能使用 DELETE语句配合 where条件

批量删除数据

还是执行truncat方法,只是不需要每次手动的输入truncate命令进行删除。通过sql命令的方式生成所有的truncate语句并写入到.sql脚本文件中,然后执行脚本即可完成删除操作,并且保留了表结构。

生成truncate命令的sql语句为:SELECT CONCAT('TRUNCATE TABLE ',TABLE_NAME,';') FROM information_schema.TABLES WHERE TABLE_SCHEMA='test' into outfile '/tmp/truncate_test.sql';

然后将生成的.sql脚本拷贝到当前文件夹下面:mv /tmp/truncate_test.sql $current_dir/

然后执行.sql脚本将数据库中所有表中数据删除:source $current_dir/truncate_test.sql

-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

MySQL 用 truncate 命令快速清空一个数据库中的所有表。

1. 先执行select语句生成所有truncate语句
语句格式:
select CONCAT('truncate TABLE ',table_schema,'.',TABLE_NAME, ';') from INFORMATION_SCHEMA.TABLES where  table_schema in ('数据库1','数据库2');

以名为dbname的数据库为例,执行select语句:
mysql> select CONCAT('truncate TABLE ',table_schema,'.',TABLE_NAME, ';') from INFORMATION_SCHEMA.TABLES where  table_schema in ('dbname');
+------------------------------------------------------------+
| CONCAT('truncate TABLE ',table_schema,'.',TABLE_NAME, ';') |
+------------------------------------------------------------+
| truncate TABLE dbname.ABOUTUSINFO;                           |
| truncate TABLE dbname.ABUTMENT;                              |
| truncate TABLE dbname.ABUTMENTFILE;                         |
| truncate TABLE dbname.ACHVORG;                               |
| truncate TABLE dbname.WORKFLOWNODE;                         |
| truncate TABLE dbname.ZONESERVICE;                           |
| truncate TABLE dbname.ZONESERVICEFILE;                      |
+------------------------------------------------------------+
7 rows in set

drop、truncate和delete的区别

(1)DELETE语句执行删除的过程是每次从表中删除一行,并且同时将该行的删除操作作为事务记录在日志中保存以便进行进行回滚操作。

TRUNCATE TABLE 则一次性地从表中删除所有的数据并不把单独的删除操作记录记入日志保存,删除行是不能恢复的。并且在删除的过程中不会激活与表有关的删除触发器。执行速度快。

(2)表和索引所占空间。

当表被TRUNCATE 后,这个表和索引所占用的空间会恢复到初始大小,

DELETE操作不会减少表或索引所占用的空间。

drop语句将表所占用的空间全释放掉。

(3)一般而言,drop > truncate > delete

(4)应用范围。

TRUNCATE 只能对TABLE;         DELETE可以是table和view

(5)TRUNCATE 和DELETE只删除数据, DROP则删除整个表(结构和数据)。

(6)truncate与不带where的delete :只删除数据,而不删除表的结构(定义)drop语句将删除表的结构被依赖的约束(constrain),触发器(trigger)索引(index);依赖于该表的存储过程/函数将被保留,但其状态会变为:invalid。

(7)delete语句为DML(data maintain Language),这个操作会被放到 rollback segment中,事务提交后才生效。如果有相应的 tigger,执行的时候将被触发。

(8)truncate、drop是DLL(data define language),操作立即生效,原数据不放到 rollback segment中,不能回滚

(9)在没有备份情况下,谨慎使用 drop 与 truncate。要删除部分数据行采用delete且注意结合where来约束影响范围。回滚段要足够大。要删除表用drop;若想保留表而将表中数据删除,如果于事务无关,用truncate即可实现。如果和事务有关,或老师想触发trigger,还是用delete。

(10) Truncate table 表名 速度快,而且效率高,因为: 
truncate table 在功能上与不带 WHERE 子句的 DELETE 语句相同:二者均删除表中的全部行。但 TRUNCATE TABLE 比 DELETE 速度快,且使用的系统和事务日志资源少。DELETE 语句每次删除一行,并在事务日志中为所删除的每行记录一项。TRUNCATE TABLE 通过释放存储表数据所用的数据页来删除数据,并且只在事务日志中记录页的释放。

(11) TRUNCATE TABLE 删除表中的所有行,但表结构及其列、约束、索引等保持不变。新行标识所用的计数值重置为该列的种子。如果想保留标识计数值,请改用 DELETE。如果要删除表定义及其数据,请使用 DROP TABLE 语句。

(12) 对于由 FOREIGN KEY 约束引用的表,不能使用 TRUNCATE TABLE,而应使用不带 WHERE 子句的 DELETE 语句。由于 TRUNCATE TABLE 不记录在日志中,所以它不能激活触发器。

一、delete

1、delete是DML,执行delete操作时,每次从表中删除一行,并且同时将该行的的删除操作记录在redo和undo表空间中以便进行回滚(rollback)和重做操作,但要注意表空间要足够大,需要手动提交(commit)操作才能生效,可以通过rollback撤消操作。

2、delete可根据条件删除表中满足条件的数据,如果不指定where子句,那么删除表中所有记录。

3、delete语句不影响表所占用的extent,高水线(high watermark)保持原位置不变。

二、truncate

1、truncate是DDL,会隐式提交,所以,不能回滚,不会触发触发器。

2、truncate会删除表中所有记录,并且将重新设置高水线和所有的索引,缺省情况下将空间释放到minextents个extent,除非使用reuse storage,。不会记录日志,所以执行速度很快,但不能通过rollback撤消操作(如果一不小心把一个表truncate掉,也是可以恢复的,只是不能通过rollback来恢复)。

3、对于外键(foreignkey )约束引用的表,不能使用 truncate table,而应使用不带 where 子句的 delete 语句。

4、truncatetable不能用于参与了索引视图的表。

三、drop

1、drop是DDL,会隐式提交,所以,不能回滚,不会触发触发器。

2、drop语句删除表结构及所有数据,并将表所占用的空间全部释放。

3、drop语句将删除表的结构所依赖的约束,触发器,索引,依赖于该表的存储过程/函数将保留,但是变为invalid状态。

总结:

1、在速度上,一般来说,drop> truncate > delete。

2、在使用drop和truncate时一定要注意,虽然可以恢复,但为了减少麻烦,还是要慎重。

3、如果想删除部分数据用delete,注意带上where子句,回滚段要足够大;

如果想删除表,当然用drop;

如果想保留表而将所有数据删除,如果和事务无关,用truncate即可;

如果和事务有关,或者想触发trigger,还是用delete;

如果是整理表内部的碎片,可以用truncate跟上reuse stroage,再重新导入/插入数据。

转载于:https://www.cnblogs.com/CWQPHP/p/10489599.html

mysql删除表中数据相关推荐

  1. Mysql清空表(truncate)与删除表中数据(delete)的区别

    2019独角兽企业重金招聘Python工程师标准>>> 为某基于wordpress搭建的博客长久未除草,某天升级的时候发现已经被插入了几万条垃圾留言,如果一条条删除那可真是累人的活. ...

  2. MySQL 插入、更新与删除表中数据

    文章目录 ↠前言↞ ↻ . 准备工作 1)使用数据库 2)创建数据表 3)查看数据表是否存在 4)查看数据表信息 (两种方法) ㊀ . 插入数据 第一种添加方法 第二种添加方法 第三种添加方法 第四种 ...

  3. MySql删除表中重复数据

    有一表中存在大量重复数据 在此记录下我删除表内重复数据的方法 -- 新增测试表 create table basic_farmer ( id INT(11), user_name VARCHAR(25 ...

  4. MySQL删除表中的数据

    Mysql删除表中的数据有三种方法,分别是delete ,drop,truncate. 一.delete删除表中的数据 delete好from结合使用,格式一般为:delete from 表名 whe ...

  5. Mysql之删除表中数据

    Mysql之删除表中数据 语法 以下是 SQL DELETE 语句从 MySQL 数据表中删除数据的通用语法: DELETE FROM table_name [WHERE Clause] 如果没有指定 ...

  6. mysql根据id删除数据库,MYSQL删除表中的指定ID数据

    MYSQL删除表中的指定ID数据 删除A表中的ID 中的开头以B* 的数据库. 复制代码 代码如下: delete FROM A WHERE id like 'B%' 单独删除 A 表中的ID B 复 ...

  7. DDL-操作数据库、操作数据表、DML-增加、修改、删除表中数据、DQL-表数据查询

    SQL 语句分类: DDL(Data Definition Language) :数据定义语言.用来操作数据库,表,列等. DML(Data Manipulation Language) :数据操作语 ...

  8. 使用SQL语句DELETE删除表中数据

    使用SQL语句DELETE删除表中数据 基本语法格式如下: FROM:可选关键字,用在DELETE关键字与目标table_or_view_name. <OUTPUT_Clause>:将已删 ...

  9. 数据库中怎么删除表中数据?

    数据库删除表中数据有三种方法: 1.drop table 表名称 drop table hl_fly_demand 2.truncate table 表名称 truncate table hl_fly ...

最新文章

  1. Android中应用百度地图API开发地图APP实例-显示百度地图
  2. linux tcp 内核模块,C – Linux – 内核模块 – TCP头
  3. 使用display:none和visibility:hidden隐藏的区别
  4. 结型场效应管的结构、特性、参数
  5. Linux lua 性能,systemTab动态分析linux下lua性能
  6. 潮流设计师创作灵感|是时候设计一下蒸汽波海报了!
  7. .net 获取xml里面的值_XML技术
  8. 【学堂在线数据挖掘:理论方法笔记】第10天(4.4)
  9. 使用valgrind检查内存越界
  10. 集体智慧编程--优化
  11. matlab 入射线反射线,ray 射线追踪的仿真小程序最多可以模拟三次反射, 出 图 matlab 272万源代码下载- www.pudn.com...
  12. 数控铣床法兰克系统代码完整版
  13. 物联网终端有哪些应用
  14. win7安装nvme固态硬盘win10专业版
  15. SQL数据库移植到ARM板步骤
  16. Win11图标变成白色文件如何解决?
  17. python函数由什么组成_python的函数
  18. css实现平角切角和弧形切角
  19. 分析晶体三极管频率特性的等效模型
  20. metaboxs.php,php – WooCommerce:将自定义Metabox添加到管理员订单页面

热门文章

  1. python抓取每期双色球中奖号码,用于分析
  2. sublime的一些使用技巧
  3. WTD实验(lv9-day15)
  4. 电信网络性能质量测量
  5. 便携式双向无线电设备-市场现状及未来发展趋势
  6. 【背板子-后缀数组】BZOJ4199 BZOJ4650 LGP5108 CF504E
  7. Day 1.《鸟哥的linux私房菜》
  8. 服务器两个网口的位置,服务器两个网口互通
  9. Remoting学习
  10. 经典Excel VBA代码