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

  • 相关阅读:
    程序员的7中武器
    需要强化的知识
    微软中国联合小i推出MSN群Beta 不需任何插件
    XML Notepad 2006 v2.0
    Sandcastle August 2006 Community Technology Preview
    [推荐] TechNet 广播 SQL Server 2000完结篇
    《太空帝国 4》(Space Empires IV)以及 xxMod 英文版 中文版 TDM Mod 英文版 中文版
    IronPython 1.0 RC2 更新 1.0.60816
    Microsoft .NET Framework 3.0 RC1
    《Oracle Developer Suite 10g》(Oracle Developer Suite 10g)V10.1.2.0.2
  • 原文地址:https://www.cnblogs.com/hider/p/9397270.html
Copyright © 2011-2022 走看看