zoukankan      html  css  js  c++  java
  • TRUNCATE 删除表,无法回退。默认选择为整个表的内容,所以不能加条件。


    TRUNCATE 删除表,无法回退。默认选择为整个表的内容,所以不能加条件。
    DELETE 删除表,可以回退。可以带where 条件。建议使用delete。但是TRUNCATE 删除表数据比delete要快。


    使用TRUNCATE TABLE语句

    TRUNCATE TABLE语句提供了一种删除表中所有记录的快速方法。因为TRUNCATE TABLE语句不记录日志,只记录整个数据页的释放操作,而DELETE语句对每一行修改都记录日志,所以使用TRUNCATE TABLE语句进行删除操作总是比没有指定条件的DELETE语句效率高。TRUNCATE TABLE立即释放了表中数据及索引所占用的全部空间,同时也释放了分配给所有索引的空间。其语法格式如下:
    TRUNCATE TABLE [ [database.] owner.] table_name
    与DELETE语句相比,TRUNCATE TABLE具有以下优点:
    l   所用的事务日志空间较少  DELETE语句每次删除一行,并在事务日志中为所删除的每行记录一个项。TRUNCATE TABLE通过释放用于存储表数据的数据页来删除数据,并且在事务日志中只记录页释放。
    l   使用的锁通常较少  当使用行锁执行DELETE语句时,将会锁定表中各行以便删除。TRUNCATE TABLE始终锁定表和页,而不是锁定各行。
    l   表中将毫无例外地不留下任何页  执行DELETE语句后,表仍会包含空页。例如,必须至少使用一个排他(LCK_M_X)表锁,才能释放堆中的空表。如果执行删除操作时没有使用表锁,表(堆)中将包含许多空页。对于索引,删除操作会留下一些空页,尽管如此,不过这些页会通过后台清除进程迅速释放。
    那么可不可以用TRUNCATE TABLE代替不带WHERE子句的DELETE语句呢?在以下几种情况是不行的:
    l   在需要保留标识的情况下不能用TRUNCATE TABLE,因为TRUNCATE TABLE会重置标识。
    l   在需要使用触发器的情况下不能使用TRUNCATE TABLE,因为它不会激发触发器。
    l   对于由FOREIGN KEY约束引用的表(即主键所在的表,不是外键所在的表)不能使用TRUNCATE TABLE.
    l   对于参与了索引视图的表不能使用TRUNCATE TABLE,注意指的是索引视图,并非普通视图。
    那么用户需要具有什么权限才可以使用TRUNCATE TABLE呢?若要使用TRUNCATE TABLE语句,必须是表的所有者,具有DBA权限或表的ALTER权限。对于基表,TRUNCATE TABLE语句需要有表的排他访问权限,因为操作是原子操作(要么删除所有行,要么不删除任何行)。这意味着所有以前打开的游标和引用要截断的表的游标都必须关闭,并且必须发出COMMIT或ROLLBACK命令释放对表的引用。对于临时表,每个用户都有自己的数据副本,不需要排他访问。
    下面结合一个简单的实例来说明如何使用TRUNCATE TABLE语句。比如需要删除商品信息表中的所有数据,可以使用如下语句:
    TRUNCATE TABLE 商品信息

    由于TRUNCATE TABLE操作是不进行日志记录的,所以建议在TRUNCATE TABLE语句之前使用BACKUP DATABASE语句来对数据库做备份。
  • 相关阅读:
    升级windows 11小工具
    windows 10更新升级方法
    您需要了解的有关 Oracle 数据库修补的所有信息
    Step by Step Apply Rolling PSU Patch In Oracle Database 12c RAC Environment
    Upgrade Oracle Database Manually from 12.2.0.1 to 19c
    如何应用版本更新 12.2.0.1.210420(补丁 32507738 – 2021 年 4 月 RU)
    xtrabackup 安装、备份和恢复
    Centos_Lvm expand capacity without restarting CentOS
    Centos_Lvm_Create pv vg lv and mount
    通过全备+relaylog同步恢复被drop的库或表
  • 原文地址:https://www.cnblogs.com/hyq0002013/p/5911483.html
Copyright © 2011-2022 走看看