2022年7月25日10:59:44

开发环境 php8 laravel8 mysql8在做一个动态文件管理的时候,发现如果我每次需要清空某个表的时候,在事务里面truncate table会触发
There is no active transaction的异常DB::table('users')->delete();
DB::table('users')->truncate();我使用delete的表,才没有问题,我就好奇delete truncate的区别TRUNCATE TABLE 在功能上与不带 WHERE 子句的 DELETE 语句相同:二者均删除表中的全部行。但 TRUNCATE TABLE 比 DELETE 速度快,且使用的系统和事务日志资源少。DELETE 语句每次删除一行,并在事务日志中为所删除的每行记录一项。TRUNCATE TABLE 通过释放存储表数据所用的数据页来删除数据,并且只在事务日志中记录页的释放。TRUNCATE TABLE 删除表中的所有行,但表结构及其列、约束、索引等保持不变。新行标识所用的计数值重置为该列的种子。如果想保留标识计数值,请改用 DELETE。如果要删除表定义及其数据,请使用 DROP TABLE 语句。对于由 FOREIGN KEY 约束引用的表,不能使用 TRUNCATE TABLE,而应使用不带 WHERE 子句的 DELETE 语句。由于 TRUNCATE TABLE 不记录在日志中,所以它不能激活触发器。TRUNCATE TABLE 不能用于参与了索引视图的表。所以它不能激活触发器。对用TRUNCATE TABLE删除数据的表上增加数据时,要使用UPDATE STATISTICS来维护索引信息。
如果有ROLLBACK语句,DELETE操作将被撤销,但TRUNCATE不会撤销。新增一条
如果在同一格表的事务里面使用了TRUNCATE TABLE 会造成事务处理失败,触发There is no active transactionDELETE 和 TRUNCATE 之间的主要区别
以下几点解释了 delete 和 truncate 命令之间的区别:当我们想从表中删除部分或全部记录时使用 DELETE 语句,而 TRUNCATE 语句将从表中删除整行。
DELETE 是一个 DML 命令,因为它只修改表数据,而 TRUNCATE 是一个 DDL 命令。
DELETE 命令可以使用 WHERE 子句过滤记录/元组。但是,TRUNCATE 命令不允许使用WHERE子句,因此我们无法在截断时过滤行。
DELETE 激活表上的所有删除触发器以触发。但是,不会在 truncate 操作上触发任何触发器,因为它不对单个行进行操作。
DELETE 从表中逐行执行删除,按处理顺序。但是,TRUNCATE 对数据页而不是行进行操作,因为它一次删除了整个表数据。
DELETE 语句只删除记录并且不重置表的身份,而 TRUNCATE 重置特定表的身份。
DELETE 命令需要更多的锁和数据库资源,因为它会在每个已删除的行上获取锁。相反,TRUNCATE 在删除数据页之前获取数据页上的锁;因此,它需要更少的锁和更少的资源。
DELETE 语句在事务日志中为每个删除的行创建一个条目,而 TRUNCATE 记录每个数据页的事务日志。
TRUNCATE 命令比 DELETE 命令快,因为它释放数据页而不是行,并在事务日志中记录数据页而不是行。
一旦使用 TRUNCATE 命令删除了记录,我们就无法将其恢复。相反,我们可以恢复从 DELETE 操作中删除的已删除数据。
DELETE 与 TRUNCATE 比较表
以下比较图表快速解释了它们的主要区别:比较基础  DELETE                          truncate
定义  delete 语句用于根据指定条件从现有表中删除单个或多个记录。    truncate 命令从现有表中删除完整数据,而不是表本身。它保留了表结构或模式。
语   它是一个 DML(数据操作语言)命令。             它是一个 DDL(数据定义语言)命令。
在哪里 它可以使用 WHERE 子句过滤表中的任何特定行或数据。        它不使用 WHERE 子句从表中过滤记录。
允许  我们需要有 DELETE 权限才能使用这个命令。            我们需要有 ALTER 权限才能使用这个命令。
在职的 此命令会逐一删除记录。                 此命令删除包含记录的整个数据页。
锁   它将在删除之前锁定该行。                    它会在删除前锁定数据页。
表标识 此命令不会重置表标识,因为它只会删除数据。            它总是重置表标识。
交易  它维护每条已删除记录的事务日志。                它不维护每个已删除数据页面的事务日志。
速度  它的速度很慢,因为它维护了日志。             它的执行速度很快,因为它一次删除了整个数据而无需维护事务日志。
扳机  此命令还可以激活应用于表的触发器并触发它们。          此命令不会激活应用于要触发的表的触发器。
恢复  它允许我们使用 COMMIT 或 ROLLBACK 语句来恢复已删除的数据。  执行此命令后,我们无法恢复已删除的数据。
索引视图    它可以与索引视图一起使用。                   它不能与索引视图一起使用。
空间  DELETE 语句比 truncate 占用更多的事务空间,因为它为每个删除的行维护一个日志。  TRUNCATE 语句占用较少的事务空间,因为它为整个数据页而不是每一行维护一个事务日志。

mysql truncate table导致事务执行失败There is no active transaction相关推荐

  1. mysql truncate table命令使用总结

    truncate使用注意 由于上过truncate table a_table命令一次当,将教训记录下来,以示警戒! mysql truncate table a_table命令受影响结果说明,亲身体 ...

  2. HDFS文件权限不足导致Sqoop执行失败

    故障信息 在使用sqoop从Mysql向HDFS导入文件时报错: Caused by: org.apache.hadoop.ipc.RemoteException(org.apache.hadoop. ...

  3. Mysql drop table 原理_mysql事务的实现原理

    此篇文章算是对mysql事务的一个总结,基本把mysql事务相关的知识点都涵盖到了,面试问来问去无非也就是这些,在了解这些之前我们先对mysql在执行的过程中 有一个整体的认识,如下图 如上图所示,M ...

  4. MySQL 锁信息和事务

    1 锁概念 1.1 什么是锁 锁是数据库系统区别于文件系统的一个关键特性.数据库系统使用锁是为了支持对共享资源进行并发访问,提供数据的完整性和一致性.例如:操作缓冲池中的LRU列表,删除.添加.移动L ...

  5. mysql show 原理_mysql事务的实现原理

    此篇文章算是对mysql事务的一个总结,基本把mysql事务相关的知识点都涵盖到了,面试问来问去无非也就是这些,在了解这些之前我们先对mysql在执行的过程中  有一个整体的认识,如下图 如上图所示, ...

  6. MySQL之锁、事务、优化、OLAP、OLTP

    本节目录 一 锁的分类及特性 二 表级锁定(MyISAM举例) 三 行级锁定 四 查看死锁.解除锁 五 事务 六 慢日志.执行计划.sql优化 七 OLTP与OLAP的介绍和对比 八 关于autoco ...

  7. mysql truncate命令

    truncate命令结果跟delete很像,但是他们的执行原理完全不一样.truncate本质还是ddl语句 1.truncate先使用create命令创建表,然后drop源表,最后rename新表. ...

  8. mysql编写完怎么执行_面试官:一条MySQL更新语句是如何执行的?

    在面试中面试中如果被面试官问到在MySQL中一条更新语句是怎么执行的?,下面让我们来探究一下! 流程图 这是在网上找到的一张流程图,写的比较好,大家可以先看图,然后看详细阅读下面的各个步骤. 执行流程 ...

  9. asscess 一条记录更新数据_一条MySQL更新语句是怎么执行的?

    流程图 这是在网上找到的一张流程图,写的比较好,大家可以先看图,然后看详细阅读下面的各个步骤. 执行流程: 1.连接验证及解析 客户端与MySQL Server建立连接,发送语句给MySQL Serv ...

最新文章

  1. LeetCode--258--各位相加*
  2. 手脱UPX(堆栈平衡原理)
  3. iTextSharp.text.Rectangle 使用方法说明
  4. windows系统安装python模块
  5. (转)wamp2.5虚拟主机VirtualHost出现403 Forbidden问题解决
  6. CSS的clear去除清除浮动元素
  7. oracle临时表空间占用率过高,ORACLE 临时表空间使用率过高的原因及临时解决方案...
  8. UC浏览器电脑版怎么设置字体大小 UC浏览器字体设置教程
  9. 查看、启动、关闭防火墙
  10. 深度linux如何装win系统,在深度deepin系统中使用deepin-wine自定义安装win程序的方法...
  11. 育英oj——LZY逃命路线总数
  12. java订单超时取消设计_订单超时30分钟自动取消
  13. 微擎公众号js支付util.pay()手动与自动引入
  14. Django REST framework(十)路由集routers的使用
  15. 2021年scrapy一分钟内爬取笔趣阁整本小说存为txt|解决章节排序问题
  16. java jsp小例题_JSP 相关试题(一)
  17. uniapp微信小程序项目启动步骤
  18. LBS找外贸客户 外贸怎么找客户
  19. ArcGIS制作经纬格网地图
  20. 传智播客javase总结 2

热门文章

  1. java表单验证手机号码位数_正则手机号码验证(一)
  2. 安全之路 —— C++实现进程守护
  3. Coinbase入局带火以太坊L2生态,Arbitrum生态大盘点
  4. QQ邮箱 网易邮箱及企业邮箱开通SMTP/POP3及设置授权码
  5. 使用bilibili_api与pyttsx3制作简单的弹幕姬
  6. TensorFlow入门:滑动平均模型
  7. 20. select循环与菜单,select语法,select示例
  8. LaTeX中数学符号和公式字体加粗的方法
  9. 车市波动、增速放缓,本土智驾供应商如何反“内卷”?
  10. mysql自增序列表,自定义mysql自增序列