跳转到内容

截断

本页使用了标题或全文手工转换
维基百科,自由的百科全书
(重定向自Truncate

SQL中,TRUNCATE TABLE语句是一种数据操纵语言 (DML) 操作,用于删除表中的所有行,且不会触发触发器(Trigger)。该操作的结果是快速移除表中的所有数据,通常会绕过许多完整性强制机制。它在SQL:2008英语SQL:2008标准中被正式引入。

TRUNCATE TABLE删除表中的所有行,但保留表结构及列、约束、索引等。若要删除表定义及其数据,使用DROP TABLE语句。

TRUNCATE TABLE mytable在逻辑上(而非物理上)等同于不带WHERE子句的 DELETE FROM mytable。TRUNCATE与DELETE的区分:

  • 事务处理(Oracle/MySQL):在Oracle数据库中,TRUNCATE 在执行前后会隐式执行commit提交)操作。
  • 性能与开销:通常,TRUNCATE TABLE通过释放表所占用的数据页来快速删除所有记录。这减少了记录删除日志(Logging)的资源开销,并减少了获取锁(Locks)的数量。以这种方式移除的记录无法通过rollback(回滚)操作恢复。注:PostgreSQLMicrosoft SQL Server是两个例外,它们允许在事务内对 TRUNCATE 进行提交或回滚。
  • 限制条件:TRUNCATE TABLE 语句中不能指定 WHERE 子句。
  • 外键约束:当表被外键引用时,不能使用TRUNCATE,因为该语句不会激活ON DELETE/ON UPDATE触发器,这可能导致数据不一致。
  • 自增列重置:在某些系统中,TRUNCATE会将自增列(Identity column)的计数重置回初始种子值。

相容性問題

[编辑]
  • 由於SQL-92的標準並沒有「Truncate」這個SQL關鍵字,故於早期的SQL相容資料庫,並不支援此SQL語法。如果要達到相近的刪除功能,只能用無條件的DELETE語法。(但自動遞增值的欄位,不會自動重置計數。)

外部連結

[编辑]