zoukankan      html  css  js  c++  java
  • SQL Truncate Table实例讲解

    在本教程中,我们来学习如何使用SQL TRUNCATE TABLE语句高效,快速地删除表中的所有数据。

    (更多教程请访问 http://www.manongzj.com

    1. SQL TRUNCATE TABLE语句简介

    要删除表中的所有数据,可使用不带WHERE子句的DELETE语句。 但是对于具有几百万行的大表,DELETE语句很慢且效率不高。

    要快速删除大表中的所有行,使用以下TRUNCATE TABLE语句:

    TRUNCATE TABLE table_name;
    

    在此语法中,指定要在TRUNCATE TABLE子句后删除数据的table_name

    某些数据库系统(如MySQL和PostgreSQL)允许直接省略TABLE关键字,因此TRUNCATE TABLE语句如下所示:

    TRUNCATE table_name;
    

    发出TRUNCATE TABLE语句时,数据库系统通过取消分配表分配的数据页来删除表中的所有行。 通过这样做,RDBMS可以减少日志记录的资源和需要获取的锁的数量。

    如果要一次截断多个表,可以在TRUNCATE TABLE子句后使用逗号分隔的表名列表,如下所示:

    TRUNCATE TABLE table_name1, table_name2, ...;
    

    并非所有数据库系统都支持这种使用TRUNCATE TABLE语句来一次删除多个表。 如果不使用,则要发出多个TRUNCATE TABLE语句来截断多个表。

    2. SQL TRUNCATE TABLE与DELETE

    逻辑上,TRUNCATE TABLE语句和不带WHERE子句的DELETE语句提供了从表中删除所有数据的相同效果。 但是,它们确实存在一些差别:

    • 使用DELETE语句时,数据库系统会记录操作。 通过一些努力,可以回滚已删除的数据。 但是,当使用TRUNCATE TABLE语句时,除非在尚未提交的事务中使用它,否则无法回滚。

    • 要从外键约束引用的表中删除数据,不能使用TRUNCATE TABLE语句。 在这种情况下,必须使用DELETE语句。

    • 如果表具有与之关联的触发器,则TRUNCATE TABLE语句不会触发delete触发器。

    • 执行TRUNCATE TABLE语句后,某些数据库系统会将自动增量列(或标识,序列等)的值重置为其起始值。 DELETE语句不是这种情况。
    • 带有WHERE子句的DELETE语句从表中删除部分数据,而TRUNCATE TABLE语句始终从表中删除所有数据。

    3. SQL TRUNCATE TABLE示例

    下面我们来看一个截断表的例子。
    首先,创建一个名为big_table的新表,如下所示:

    CREATE TABLE big_table (
        id INT AUTO_INCREMENT PRIMARY KEY,
        val INT
    );
    

    其次,如果要将样本数据插入big_table表,请多次执行以下语句:

    INSERT INTO big_table (val)
    VALUES
        (RAND(100000));
    

    请注意,如果使用支持存储过程的数据库系统,则可以将此语句放在循环中。 例如,MySQL中的以下存储过程将数据加载到big_table表中,其中包含num参数指定的行数。

    DELIMITER $$
    CREATE PROCEDURE load_big_table_data(IN num int)
    BEGIN
     DECLARE counter int default 0;
    
     WHILE counter < num DO
       INSERT INTO big_table(val)
       VALUES(RAND(1000000));
     END WHILE;
    
    END$$
    

    以下语句调用load_big_table_data存储过程将999999行数据插入到big_table表。

    CALL load_big_table_data(999999)
    

    第三,要删除big_table中所有数据,请使用以下语句:

    TRUNCATE TABLE big_table;
    

    如上所见,TRUNCATE TABLE语句的速度有多快。

    现在我们已经学习了如何使用TRUNCATE TABLE语句来快速删除大表中的所有数据,并理解TRUNCATE TABLEDELETE语句之间的差异。

  • 相关阅读:
    热血投篮~手机游戏图像外包,美术完成度超过80%。现在需要对部分元素进行修改,价格
    BetaTank 1.0.1 手机 游戏 Nokia Symbian 塞班
    弹弓弹球 (banus) Android 游戏
    欢迎反馈意见
    Which Macros should I use? Themida的SDK中应该怎么使用各种宏?
    通过Daffodil for VS使VS2010的IDE可以用VC6 VC7.1 VC9等编译器进行项目编译
    STL中各种容器效率
    AcceptEx获取远程ip和端口
    PC寄存器
    VC6 sp6补丁地址
  • 原文地址:https://www.cnblogs.com/myhomepages/p/15812364.html
Copyright © 2011-2022 走看看