truncate命令结果跟delete很像,但是他们的执行原理完全不一样。truncate本质还是ddl语句

1.truncate先使用create命令创建表,然后drop源表,最后rename新表。

2 drop只是删除元数据,所以比delete快很多,特别是大表

3 truncate本质是ddl,需要ddl权限。ddl本身是自提交的,所以truncate也不能rollback回滚

4 因为是truncate是重建表,所以truncate是可以整理表碎片的(delete不可以)

5 truncate在执行有外键约束的reference表时会失败

下面对truncate外键约束的reference表的测试

mysql> show create table testa;
| Table | Create Table                                                                                                                                                                                                                  
| testa | CREATE TABLE `testa` (
  `a` int(11) DEFAULT NULL,
  `b` char(4) DEFAULT NULL,
  `c` int(11) DEFAULT NULL,
  `d` int(11) DEFAULT NULL,
  `e` int(11) DEFAULT NULL,
  KEY `idx_aaa` (`a`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 |
1 row in set (0.01 sec)

mysql> show create table testb;
| Table | Create Table                                                                                                  
| testb | CREATE TABLE `testb` (
  `a` int(11) DEFAULT NULL,
  KEY `idx_sam` (`a`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 |
1 row in set (0.00 sec)

mysql> select * from testb;
Empty set (0.00 sec)

mysql> alter table testb add constraint fk_testab foreign key (a) REFERENCES testa(a);
Query OK, 0 rows affected (0.11 sec)
Records: 0  Duplicates: 0  Warnings: 0

mysql> show create table testb;
| Table | Create Table                                                                                                  |
| testb | CREATE TABLE `testb` (
  `a` int(11) DEFAULT NULL,
  KEY `idx_sam` (`a`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 |
1 row in set (0.01 sec)

mysql> truncate table testa;
Query OK, 0 rows affected (0.11 sec)

mysql> insert into testa values(1,'1',1,1,1);
Query OK, 1 row affected (0.00 sec)

mysql> insert into testb values(1);
ERROR 1785 (HY000): Statement violates GTID consistency: Updates to non-transactional tables can only be done in either autocommitted statements or single-statement transactions, and never in the same statement as updates to transactional tables.

mysql> select * from testb;
Empty set (0.03 sec)

mysql>  alter table   testb drop  foreign key fk_testab;
Query OK, 0 rows affected (0.02 sec)
Records: 0  Duplicates: 0  Warnings: 0

mysql> insert into testb values(2);
Query OK, 1 row affected (0.02 sec)

--有外键约束的mysiam表,在开启GTID时无法insert数据

--创建innodb表进行测试
mysql>  create table testc(a int ,  foreign key (a)  REFERENCES testa(a)) ;    
Query OK, 0 rows affected (0.12 sec)

mysql> insert into testc values(1);
Query OK, 1 row affected (0.01 sec)

mysql> insert into testc values(2);
ERROR 1452 (23000): Cannot add or update a child row: a foreign key constraint fails (`lzldb`.`testc`, CONSTRAINT `testc_ibfk_1` FOREIGN KEY (`a`) REFERENCES `testa` (`a`))

mysql> truncate table testa;
ERROR 1701 (42000): Cannot truncate a table referenced in a foreign key constraint (`lzldb`.`testc`, CONSTRAINT `testc_ibfk_1` FOREIGN KEY (`a`) REFERENCES `lzldb`.`testa` (`a`))

mysql truncate命令相关推荐

  1. mysql truncate table命令使用总结

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

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

    MySQL 用 truncate 命令快速清空一个数据库中的所有表. 1. 先执行select语句生成所有truncate语句 语句格式: select CONCAT('truncate TABLE ...

  3. oracle数据库倒顺,mysql常用命令

    mysql 文件系统管理数据存在的问题 1.数据冗余性和不一致性 2.数据访问 3.数据相对独立 4.完整性和原子性问题 5.并发访问异常 6.安全性问题 数据库:指的是以一定方式储存在一起,能为多个 ...

  4. MySQL常用命令大全

    登录MySQL方法 单实例MySQL登录的方法  mysql    #刚装完系统无密码情况登录方式,不需要密码  mysql -u root  #刚装完系统无密码的情况登录  mysql -uroot ...

  5. mysql ndb 命令_Mysql入门基础命令

    1    Mysql基本操作 1.1    查询当前数据库 mysql> show databases; +--------------------+ | Database | +------- ...

  6. 04 : mysql 基础命令操作,字符集

     insert 插入讲解 : 1:创建一个表: create table test( id int(4) not null auto_increment, name char(20) not null ...

  7. 晨魅--MySQL常用命令

    MySQL常用命令 MySQL初步命令 1        MySQL数据库基础命令 1.1    创建.查看数据库 1.1.1  查看系统数据库 SHOW DATABASES 1.1.2  创建用户数 ...

  8. mysql truncate很慢_mysql数据库truncate表时间长处理

    [环境介绍] 系统环境:Linux + mysql 5.7.18 + 主从复制架构 [背景描述] 客户反映用在mysql数据库上truncate一个innode引擎的list分区100G左右表时,耗时 ...

  9. MySQL用命令窗口打开

    MySQL用命令窗口打开 进入bin目录,按住shift键然后点击鼠标右键可以选择在该目录下打开命令窗口,或者在地址栏中输入cmd进入命令窗口.输入mysql -u root -p后回车,然后会提示输 ...

最新文章

  1. Struts2基础(1)_MVC
  2. AI一分钟|美国第一家!Waymo商业自动驾驶打车服务正式获批
  3. inux 后台执行命令
  4. javascript中文网学习
  5. 关于sendmail报错“did not issue MAIL/EXPN/VRFY/ETRN during connection to
  6. c++ string类的常用方法_【常用类方法】Object
  7. 【洛谷】普及练习场 深度优先搜索【易】
  8. CSRF跨站请求伪造攻击
  9. 谷歌开源 VR 应用
  10. 学生信息管理系统总结
  11. PackageManager获取应用列表
  12. 十月份推广,景城网也尝试使用QQ邮件群反的方式,那么如何 采集QQ邮箱地址呢?大部分是廊坊本地的。QQ导出好友 QQ导出通讯录 QQ邮箱采集 如何导出QQ好友
  13. 自己写strcmp( )函数
  14. MATLAB中的impixel函数——获取图像像素值
  15. 报错:Required String parameter 'XXX' is not present错误的几种可能性
  16. MacBook:如何拆卸或安装内存
  17. 大数据同步工具Canal
  18. 计算机图形学13:三维图形的几何变换
  19. 《程序员》2011年10期精彩内容:移动大航海时代
  20. AutoService注解无法生成META-INF文件

热门文章

  1. U盘问题,插入时只有声音,没有显示,在”计算机管理”的“磁盘管理”中,上面看不到盘符”H:”,下面可以看到”磁盘1 可移动无媒
  2. 1302420140137+汤毓聪+第3次实验
  3. 黑马程序员之 --- 集合
  4. 项目管理中四种常见的阶段
  5. QQ邮箱的订阅邮件怎么取消订阅?
  6. stlink 未知usb设备 设备描述符请求失败
  7. unity 只输入中英数_使用正则限制input框只能输入数字/英文/中文等等
  8. 教你快速学会设计模式
  9. 801计算机专业基础西北工业大学,2019西北工业大学研究生入学考试大纲801计算机专业基础...
  10. pcie dma 相关知识整理(xilinx平台)