0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

MySQL数据库:drop、truncate和delete的区别

如意 来源:CSDN 作者:海盗船长没有船 2020-08-19 17:22 次阅读

一、delete

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

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

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

二、truncate

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

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

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

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

三、drop

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

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

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

总结:

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

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

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

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

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

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

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

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 数据库
    +关注

    关注

    7

    文章

    3803

    浏览量

    64409
  • 触发器
    +关注

    关注

    14

    文章

    2000

    浏览量

    61161
  • MySQL
    +关注

    关注

    1

    文章

    812

    浏览量

    26585
收藏 人收藏

    评论

    相关推荐

    数据库数据恢复—Mysql数据库表记录丢失的数据恢复流程

    Mysql数据库故障: Mysql数据库表记录丢失。 Mysql数据库故障表现: 1、
    的头像 发表于 12-16 11:05 162次阅读
    <b class='flag-5'>数据库</b><b class='flag-5'>数据</b>恢复—<b class='flag-5'>Mysql</b><b class='flag-5'>数据库</b>表记录丢失的<b class='flag-5'>数据</b>恢复流程

    数据库数据恢复—MYSQL数据库ibdata1文件损坏的数据恢复案例

    mysql数据库故障: mysql数据库文件ibdata1、MYI、MYD损坏。 故障表现:1、数据库无法进行查询等操作;2、使用my
    的头像 发表于 12-09 11:05 156次阅读

    香港云服务器怎么部署MySQL数据库

    在香港云服务器上部署MySQL数据库的步骤如下: 步骤 1: 更新软件包列表 首先,确保软件包列表是最新的。在终端中执行以下命令: sudo apt update 步骤 2: 安装 MySQL
    的头像 发表于 11-14 16:15 177次阅读

    数据库数据恢复—通过拼接数据库碎片恢复SQLserver数据库

    一个运行在存储上的SQLServer数据库,有1000多个文件,大小几十TB。数据库每10天生成一个NDF文件,每个NDF几百GB大小。数据库包含两个LDF文件。 存储损坏,数据库
    的头像 发表于 10-31 13:21 229次阅读
    <b class='flag-5'>数据库</b><b class='flag-5'>数据</b>恢复—通过拼接<b class='flag-5'>数据库</b>碎片恢复SQLserver<b class='flag-5'>数据库</b>

    适用于MySQL的dbForge架构比较

    dbForge Schema Compare for MySQL 是一种工具,用于轻松有效地比较和部署 MySQL 数据库结构和脚本文件夹差异。该工具提供了 MySQL
    的头像 发表于 10-28 09:41 214次阅读
    适用于<b class='flag-5'>MySQL</b>的dbForge架构比较

    数据库数据恢复—SQL Server数据库出现823错误的数据恢复案例

    SQL Server数据库故障: SQL Server附加数据库出现错误823,附加数据库失败。数据库没有备份,无法通过备份恢复数据库
    的头像 发表于 09-20 11:46 353次阅读
    <b class='flag-5'>数据库</b><b class='flag-5'>数据</b>恢复—SQL Server<b class='flag-5'>数据库</b>出现823错误的<b class='flag-5'>数据</b>恢复案例

    Oracle数据恢复—Oracle数据库delete删除的数据恢复方法

    删除Oracle数据库数据一般有以下2种方式:deletedroptruncate。下面针对这2种删除oracle
    的头像 发表于 09-11 11:45 378次阅读

    华纳云:MySQL初始化操作如何创建新的数据库

    要在MySQL中创建一个新的数据库,可以按照以下步骤进行操作: 登录到MySQL数据库管理系统中。可以使用MySQL命令行客户端或者图形化工
    的头像 发表于 09-04 14:30 269次阅读

    恒讯科技分析:跨境电商网站有哪些数据库系统是推荐使用的?

    对于跨境电商网站,数据库系统的选择非常关键,以下是一些推荐使用的数据库系统: 1、MySQLMySQL是一个流行的开源关系型数据库管理系统
    的头像 发表于 08-12 15:01 360次阅读

    恒讯科技分析:sql数据库怎么用?

    SQL数据库的使用通常包括以下几个基本步骤: 1、选择数据库系统: 选择适合您需求的SQL数据库系统,如MySQL、PostgreSQL、Microsoft SQL Server、SQ
    的头像 发表于 07-15 14:40 363次阅读

    数据仓库与数据库的主要区别

    数据仓库与数据库是两个在信息技术领域中常见的概念,它们在数据管理和分析方面发挥着重要作用。尽管它们在某些方面有相似之处,但它们在设计、目的和功能上存在显著差异。本文将介绍数据仓库与
    的头像 发表于 07-05 14:57 530次阅读

    Oracle数据恢复—Oracle数据库truncate表的数据恢复案例

    北京某国企客户Oracle 11g R2数据库truncate table CM_CHECK_ITEM_HIS,表数据丢失,业务查询到该表时报错,数据库的备份不可用,无法查询表
    的头像 发表于 03-11 17:30 394次阅读
    Oracle<b class='flag-5'>数据</b>恢复—Oracle<b class='flag-5'>数据库</b>误<b class='flag-5'>truncate</b>表的<b class='flag-5'>数据</b>恢复案例

    数据库数据恢复】Oracle数据库ASM实例无法挂载的数据恢复案例

    oracle数据库ASM磁盘组掉线,ASM实例不能挂载。数据库管理员尝试修复数据库,但是没有成功。
    的头像 发表于 02-01 17:39 528次阅读
    【<b class='flag-5'>数据库</b><b class='flag-5'>数据</b>恢复】Oracle<b class='flag-5'>数据库</b>ASM实例无法挂载的<b class='flag-5'>数据</b>恢复案例

    怎么简单实现由Labview读取的串口数据自增写入mysql5.7数据库中?

    怎么简单实现由Labview读取的串口数据自增写入mysql5.7数据库中? 已实现:串口数据的接收处理 mysql5.7的安装(已测试
    发表于 01-11 22:05

    MySQL数据库中通用表空间详解

    MySQL 数据库中有效管理存储和性能至关重要,通用表空间为实现这一目标提供了灵活性。本文讨论通用表空间并探讨其功能、优点和实际用法,并附有说明性示例。
    的头像 发表于 01-10 09:33 2239次阅读