从数据库的概念上说,Truncate操作是对于数据表的截断操作,即简单地调用文件系统的截断操作系统调用来实现表的清空操作。在基于MyISAM引擎的MySQL数据库上,Truncate始终如此操作,因此Truncate结果虽然从基本等效于无where限定的Delete语句(除了Truncate会将自增字段值重置为0以外),不过效率却高得多。

但是由于InnoDB存储引擎支持外键,Truncate操作就不是那么简单,因为外键是数据完整性的限定,如果对数据文件进行简单的截断操作,将有可能破坏其外键约束完整性。

因此,在MySQL 5.1(及以下版本)中Truncate一张InnoDB表时,如果该表存在外键约束,那么实际的操作也等同于无where限定的Delete语句,也就是说,MySQL将逐条删除记录,并检查该次删除操作是否可能违反外键操作,如果没有违反约束的情况出现,那么表被顺利清空,自增字段值被重置为0;一旦出现违反外键约束,那么分为两种情况:

该外键设定了ON DELETE CASCADE,那么MySQL会同时删除参照表中的相应记录。

如果该外键没有设定ON DELETE CASCADE,那么MySQL将停止Truncate操作并报错(Error 1451)。

而在MySQL 5.5中,存在外键约束的InnoDB表,在任何情况下都不允许进行Truncate操作,并报错(Error 1701)。因此,为了向后兼容性的考虑,官方也建议,即使使用MySQL 5.1,也尽量在InnoDB引擎下使用Delete语句代替Truncate语句。

mysql truncate 外键,MySQL Truncate与外键限制相关推荐

  1. 【数据库1】mysql,DDL/DML,DQL,外键约束,多表/子查询,事务,登陆,连接池,jdbc,redis,crontab,ftp,oracle,数据交换/存储/收集

    文章目录 1.mysql安装:存储:集合(内存:临时),IO流(硬盘:持久化) 1.1 服务端:双击mysql-installer-community-5.6.22.0.msi 1.2 客户端:命令行 ...

  2. mysql支持UUID做外键_多表外键下将普通的id主键更新为uuid主键

    多表外键下将普通的id主键更新为uuid主键 2019-05-20 02:45:37 来源: 晴天小雨 0 摘要:在多表外键影响和保证数据不删除的前提下,借助Flask-sqlalchemy插件及SQ ...

  3. mysql表定义外键语法_mysql设置外键的语法怎么写?

    2012-08-31 回答 mysql外键设置详解 (1) 外键的使用: 外键的作用,主要有两个: 一个是让数据库自己通过外键来保证数据的完整性和一致性 一个就是能够增加er图的可读性 有些人认为外键 ...

  4. mysql修改级联表数据_MySQL数据库 外键,级联, 修改表的操作

    1.外键: 用来建立两张表之间的关系 - 一对多 - 多对多 - 一对一 研究表与表之间的关系: 1.定义一张 员工部门表 id, name, gender, dep_name, dep_desc - ...

  5. mysql如何建外建_mysql如何建立外键

    mysql如何建立外键 一个主表blog博客表, DROP TABLE IF EXISTS  `blog`; CREATE TABLE `blog` ( `id` int(11) NOT NULL a ...

  6. mysql cascade|restrict|no action|set null__mysql 外键的几种约束

    mysql cascade|restrict|no action|set null MySQL有两种常用的引擎类型:MyISAM和InnoDB.目前只有InnoDB引擎类型支持外键约束.InnoDB中 ...

  7. mysql 权限 备份还原,MYSQL学习笔记09:备份还原,用户权限,外键

    在线QQ客服:1922638 专业的SQL Server.MySQL数据库同步软件 整个数据库数据备份也称为sql数据备份:备份的结果都是sql指令 在mysql中,提供了专门用于备份sql的客户端: ...

  8. mysql 所有外键_mysql中的外键

    mysql中的外键 1.默认的外键存在之后,会对数据进行约束. 1)约束1:如果子表中添加的数据,外键字段对应的数据如果在父表中不存在,那么添加失败. 有数据之后: 修改:可以修改跟外键不相关的任何字 ...

  9. 外键查询_详解MySQL数据库删除所有表的外键约束、禁用外键约束相关脚本

    概述 数据库的外键虽然能保证数据数据一致性和完整性,但是也一定程度地影响了数据更新的性能.在开发中,我们使用PowerDesigner建立物理数据模型时,为了结构的清晰,增加可读性,会创建表与表之间的 ...

最新文章

  1. Ubuntu 16.04安装XMind 8
  2. 位运算和时间复杂度的分析
  3. android 获取u盘名字_android 获取U盘路径
  4. 设计模式理解:观察者模式
  5. python的变量名必须以什么开头_python以下划线开头的变量名含义
  6. nodejs安装express框架
  7. 关于所谓的穷人富人幸福论
  8. C++编译之提示ld: can‘t open output file for writing: test1, errno=21 for architecture x86_64
  9. Leetcode周赛复盘——第 278 场力扣周赛
  10. 线程 sleep 取消_Java面试集锦:25道线程类相关面试题与答案(下)
  11. mybatis框架执行原理简单实现
  12. MS Sql Server 数据库或表修复(DBCC CHECKDB)
  13. 2021年软件评测师新版考试大纲
  14. matlab分布拟合函数
  15. C语言 实验六 函数
  16. 数列极限的概念及性质
  17. Hive修复外表分区时报错
  18. 从实战学习微信小程序-电商星星评分功能(五)
  19. 【中秋佳节】CSDN卷王们内卷--中秋节要不要休息呢?
  20. IOS性能调优系列:使用Zombies动态分析内存中的僵尸对象

热门文章

  1. css 背景条纹效果
  2. 利用python一键将webp格式图片转换为png或者jpg
  3. 码仔漫画:“你是什么垃圾?”(下)
  4. Xen和KVM的对比
  5. 一个完整的HTTP请求的详细过程
  6. android的qq浏览器video播放视频结束后显示qq推荐视频
  7. 分体式测斜探头安装要点及注意事项
  8. 常见几个设计模式(面试自自备)
  9. 学习数据结构的第三天
  10. YModem协议详细文档(用于下位机主板升级)