zoukankan      html  css  js  c++  java
  • MySQL学习笔记:delete from与truncate table的区别

    在Mysql数据库的使用过程中,删除表数据可以通过以下2种方式:

    • delete from table_name
    • truncate table table_name

    (1)delete from语句可以使用where对要删除的记录进行选择。而使用truncate table将删除表中的所有记录。因此,delete语句更灵活。 

    (2)如果要清空表中的所有记录,可以使用下面的两种方法: 

      delete from tablename 
      truncate table tablename 

      其中第二条记录中的table是可选的。

    (3)如果要删除表中的部分记录,只能使用delete语句。 

      delete FROM table1 WHERE xxx; 

      如果delete不加WHERE子句,那么它和truncate table是一样的,但它们有一点不同,那就是delete可以返回被删除的记录数,而truncate table返回的是0。 

    (4)如果一个表中有自增字段,使用truncate table和没有WHERE子句的delete删除所有记录后,这个自增字段将起始值恢复成1。如果你不想这样做的话,可以在delete语句中加上永真的WHERE,如WHERE 1或WHERE true。 

         delete FROM table1 WHERE 1; 

      上面的语句在执行时将扫描每一条记录。但它并不比较,因为这个WHERE条件永远为true。这样做虽然可以保持自增的最大值,但由于它是扫描了所有的记录,因此,它的执行成本要比没有WHERE子句的delete大得多。

      delete和truncate table的最大区别是delete可以通过WHERE语句选择要删除的记录。但执行的速度不快。而且还可以返回被删除的记录数。而truncate table无法删除指定的记录,而且不能返回被删除的记录。但它执行得非常快。

      与标准的SQL语句不同,delete支持order by 和 limit 子句,通过这两个子句,我们可以更好地控制要删除的记录。

      如当我们只想删除where子句过滤出来的记录的一部分,可以使用limit,如果要删除后几条记录,可以通过order by 和limit 配合使用。假设我们要删除users表中name等于”nike”的前6条记录。可以使用如下的delete语句:

    delete FROM users WHERE name = 'nike' LIMIT 6;

      一般MySQL并不确定删除的这6条记录是哪6条,为了更保险,我们可以使用order by 对记录进行排序。

    delete FROM users WHERE name = 'nike' ORDER BY id DESC LIMIT 6;

      还有一点就是,如果要删除表中的所有数据,建议使用truncate table, 尤其是表中有大量的数据,使用truncate table是将表结构重新建一次速度要比使用delete from快很多,而delete from是一行一行的删除,速度很慢。


    END 2018-08-02 09:39:10

  • 相关阅读:
    HDU 6182 A Math Problem 水题
    HDU 6186 CS Course 位运算 思维
    HDU 6188 Duizi and Shunzi 贪心 思维
    HDU 2824 The Euler function 欧拉函数
    HDU 3037 Saving Beans 多重集合的结合 lucas定理
    HDU 3923 Invoker Polya定理
    FZU 2282 Wand 组合数学 错排公式
    HDU 1452 Happy 2004 数论
    HDU 5778 abs 数论
    欧拉回路【判断连通+度数为偶】
  • 原文地址:https://www.cnblogs.com/hider/p/9397270.html
Copyright © 2011-2022 走看看