基本语法如下:
TRUNCATE TABLE table_name;
其中,table_name 是要截断的表的名称。
请注意以下几点:
1. TRUNCATE 与 DELETE 的区别:
- DELETE FROM table_name; 将逐行删除表中的数据,会生成大量的日志,并且可能触发触发器等。
- TRUNCATE TABLE table_name; 以一种更高效的方式截断表,删除所有行,但不会逐行操作,因此速度更快。但要注意,TRUNCATE 不触发 ON DELETE 触发器,因此在需要触发器执行的情况下,可能需要使用 DELETE。
2. 保留序列值:
默认情况下,TRUNCATE 会保留与序列相关联的序列值。这意味着下一次插入到表中时,序列将继续生成下一个值。如果要重置序列值,可以使用 RESTART IDENTITY 选项:
TRUNCATE TABLE table_name RESTART IDENTITY;
这将重新设置与表关联的序列的当前值。
3. 权限:
执行 TRUNCATE TABLE 需要适当的权限,通常是表的所有者或拥有足够权限的用户。
例子:
-- 创建一个示例表
CREATE TABLE example_table (
id serial PRIMARY KEY,
name VARCHAR(100)
);
-- 插入一些数据
INSERT INTO example_table (name) VALUES ('John'), ('Alice'), ('Bob');
-- 使用 TRUNCATE 截断表
TRUNCATE TABLE example_table;
-- 此时表中的数据已经被删除,但表结构保持不变
请注意,TRUNCATE TABLE 是一个 DDL(数据定义语言)命令,因此在执行后会自动提交事务。如果你在事务中执行 TRUNCATE TABLE,它会立即生效,而不需要显式提交。
转载请注明出处:http://www.zyzy.cn/article/detail/14148/PostgreSQL