MySQL DELETE语句与TRUNCATE TABLE语句

语法:

  • DELETE
DELETE [LOW_PRIORITY] [QUICK] [IGNORE] FROM tbl_name
    [PARTITION (partition_name [, partition_name] ...)]
    [WHERE where_condition]
    [ORDER BY ...]
    [LIMIT row_count]
  • TRUNCATE
TRUNCATE [TABLE] tbl_name

区别:
1、TRUNCATE是DDL语句,隐式提交不可以rollback,但是DELETE是DML语句,是可以rollback的;
2、TRUNCATE相当于DROP TABLE然后CREATE TABLE,任何AUTO_INCREMENT值都将重置为其起始值,比DELETE快 ,DELETE不会删除索引;
3、DELETE删除可以返回行数,TRUNCATE不会返回有意义的影响行,通常返回“0”;
4、只要表定义有效,TRUNCATE TABLE即使数据或索引文件已损坏,也可以将表重新创建为空表 。

有约束的TRUNCATE:

  • 错误:
Error Code: 1701. Cannot truncate a table referenced in a foreign key constraint (`yqutesting`.`table_f`, CONSTRAINT `table_f_ibfk_4` FOREIGN KEY (`old_id`) REFERENCES `yqutesting`.`table_e` (`ID`))
  • 解决方法一:
    删除约束
    清空表
    手工删除引用该表的记录
    创建约束
  • 解决方法二:
SET FOREIGN_KEY_CHECKS = 0;   
TRUNCATE TABLE TABLE_E;  
SET FOREIGN_KEY_CHECKS = 1; 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值