语法:
- 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;