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; 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章