400-800-0824
info@ymatrix.cn
400-800-0824
info@ymatrix.cn
400-800-0824
info@ymatrix.cn
400-800-0824
info@ymatrix.cn
400-800-0824
info@ymatrix.cn
YMatrix 文档
关于 YMatrix
标准集群部署
数据写入
数据迁移
数据查询
运维监控
参考指南
工具指南
数据类型
存储引擎
执行引擎
系统配置参数
SQL 参考
常见问题(FAQ)
清空表的所有行。
TRUNCATE [TABLE] [ONLY] name [ * ] [, ...]
[ RESTART IDENTITY | CONTINUE IDENTITY ] [CASCADE | RESTRICT]
TRUNCATE快速删除一个表或一组表中的所有行。 它与在每个表上进行不限定DELETE的效果相同, 但是由于它实际上并不扫描表,因此速度更快。 这在大型表上最有用。
您必须在表上具有TRUNCATE特权才能清空表行。
TRUNCATE在对其操作的表上获取访问排他锁,这将阻止该表上的所有其他并发操作。 如果指定了RESTART IDENTITY,则将要重新计数的所有序列都将被排他地锁定。 如果需要并发访问表,则应改用DELETE命令。
name
CASCADE
RESTART IDENTITY
CONTINUE IDENTITY
RESTRICT
TRUNCATE将不会运行表可能存在的任何用户定义的ON DELETE触发器。
TRUNCATE不会清空从指定表继承的任何表。 仅指定的表被清空,而不是其子表。
TRUNCATE不会清空分区表的任何子表。 如果指定分区表的子表,则TRUNCATE不会从该表及其子表中删除行。
TRUNCATE不是MVCC安全的。 清空后,如果并发事务使用清空发生之前获取的快照,则该表将对并发事务显示为空。
对于表中的数据,TRUNCATE是事务安全的:如果所属的事务未提交,则清空将被安全地回滚。
TRUNCATE在其操作的每个表上获取ACCESS EXCLUSIVE锁,该锁将阻止该表上的所有其他并发操作。 如果需要并发访问表,则应改用DELETE命令。
当指定了RESTART IDENTITY时,隐式的ALTER SEQUENCE RESTART操作也将以事务方式完成; 也就是说,如果所在的事务没有提交,它们将被回滚。 这不同于ALTER SEQUENCE RESTART的正常行为。 请注意,如果在事务回滚之前对重新启动的序列执行了任何其他序列操作,则这些操作对序列的影响将被回滚,但不会对currval()产生影响。 也就是说,在事务currval()之后,它将继续反映在失败的事务中获得的最后一个序列值,即使序列本身可能不再与此一致。 这类似于事务失败后currval()的通常行为。
清空表films和distributors:
TRUNCATE films, distributors;
相同,并重置所有关联的序列生成器:
TRUNCATE films, distributors RESTART IDENTITY;
SQL:2008标准包括带有语法TRUNCATE TABLE tablename的TRUNCATE命令。 子句CONTINUE IDENTITY/RESTART IDENTITY也出现在该标准中,但是尽管具有相关的含义,但略有不同。 该命令的一些并发行为由标准实现定义,因此应考虑上述注意事项,并在必要时与其他实现进行比较。