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語法。(但自動遞增值的欄位,不會自動重置計數。)

外部連結

编辑

📚 Artikel Terkait di Wikipedia

SQL语法

ROLLBACK会放弃上次COMMIT或ROLLBACK之后的修改,使数据恢复到前一状态。不过一旦COMMIT语句结束,事务所产生的修改将无法回退。 COMMIT和ROLLBACK会中止当前事务并释放锁。在没有START TRANSACTION或类似语句的情况下,SQL的语义与实现有关的。

Autocommit

transaction、commit、rollback命令。 Commit Transaction Autocommit transactions. https://technet.microsoft.com/en-us/library/aa213069(v=sql.80).aspx (页面存档备份,存于互联网档案馆)

Java数据库连接

一個數據庫事務代碼如下: boolean autoCommitDefault = conn.getAutoCommit(); try { conn.setAutoCommit(false); //关闭自动提交,从而将之后执行的多个SQL语句视为同一个事务(自动提交会使每一个SQL语句执行后提交一次而重新启用新的事务)

Savepoint

name将使得命名的savepoint被放弃,但不影响其他savepoint。ROLLBACK或COMMIT导致所有savepoint被放弃。 支持savepoint的数据库有:PostgreSQL、Oracle数据库、Microsoft SQL Server、MySQL、DB2、SQLite(从3.6

ActiveX Data Objects

象)。允许开发人员编写访问数据的代码而不用关心数据源是如何实现与访问驱动的,而只用关心到数据库的连接。访问数据库的时候,关于SQL的知识不是必要的,但是特定数据库支持的SQL命令仍可以通过ADO中的命令对象(Command)来执行。 ADO被设计来替代微软早期的数据访问对象层(包括RDO(Remote

MySQL数据库引擎的比较

Group Commit. [2018-12-17]. (原始内容存档于2011-11-04).  MySQL 5.5 Reference Manual - The InnoDB Storage Engine. [28 May 2015]. (原始内容存档于2020-01-01).  MySQL 5.5

NHibernate

Age = 50 }); //The call below will execute the SQL INSERT and commit the transaction transaction.Commit(); } } //Retrieve the Customer from the database

Cassandra

Apache Cassandra(社区内一般简称为C*)是一套开源分布式NoSQL数据库系统。它最初由Meta开发,用于改善電子郵件系統的搜尋效能的简单格式数据,集Google BigTable的数据模型与Amazon Dynamo的完全分布式架构于一身。Facebook于2008将 Cassandra