首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >TRUNCATE不会在DELETE触发器上运行?

TRUNCATE不会在DELETE触发器上运行?
EN

Stack Overflow用户
提问于 2016-02-09 15:19:39
回答 1查看 1.6K关注 0票数 1

我正在搜索为什么把截断放在DDL而不是DML的主题,我在这里找到了以下答案:为什么截断DDL?

在这个答案中,我找到了一个句子,如下所示

“DELETE触发器不运行TRUNCATE也使其与正常的DML操作不同”

这与MYSQL参考手册的说法相冲突。

“如果外键约束指定DELETE级联,则删除子表(引用)表中的行,截断的表变为空。”

我处于一种混乱的状态。请详细说明这个问题。

谢谢

EN

回答 1

Stack Overflow用户

发布于 2016-02-09 16:47:15

MySQL 5.0

13.1.21截断表语法 ..。 对于5.0.3版本之前的InnoDB表,InnoDB通过逐个删除行来处理截断表。从MySQL 5.0.3开始,只有当存在引用表的任何外键约束时,才会使用逐行删除。如果没有外键约束,InnoDB执行快速截断,方法是删除原始表并创建一个具有相同定义的空表,这比逐个删除行要快得多。(当使用快速截断时,它会将任何AUTO_INCREMENT计数器重置为零。从MySQL 5.0.13开始,不管是否存在外键约束,截断表都会将AUTO_INCREMENT计数器重置为零。) 在外键约束引用表的情况下,InnoDB逐个删除行并处理每个约束。如果外键约束指定DELETE级联,则删除子表(引用)表中的行,截断的表变为空。如果外键约束没有指定级联,则截断表语句将逐个删除行,并在遇到子行引用的父行时停止,返回以下错误: 错误1451 (23000):无法删除或更新父行:外键约束失败(test.child、约束child\_ibfk\_1外键(parent\_id)引用parent (id)) ..。

MySQL 5.1

13.1.34截断表语法 ..。 如果有引用该表的外键约束,则InnoDB将逐个删除行来处理截断表,并在其进行过程中处理这些约束。如果外键约束指定DELETE级联,则删除子表(引用)表中的行,截断的表变为空。如果外键约束没有指定级联,则截断表语句将逐个删除行,并在遇到子行引用的父行时停止,返回以下错误: 错误1451 (23000):无法删除或更新父行:外键约束失败(test.child、约束child\_ibfk\_1外键(parent\_id)引用parent (id)) Note 在MySQL 5.5及更高版本中,外键引用的InnoDB表不允许截断表。为便于升级,请重写此类语句,改为使用DELETE。..。

MySQL >= 5.5

13.1.34截断表语法 ..。

  • 如果来自引用表的其他表的外键约束,则InnoDB表或NDB表的截断表将失败。允许在同一表的列之间设置外键约束。

..。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35295644

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档