PostgreSQL删除清空表,truncate、delete、drop

主题:删除表时,如果要释放空间,需要使用TRUNCATE。

一、TRUNCATE

语法:TRUNCATE TABLE table_name;

示例:

sql 复制代码
TRUNCATE TABLE gd_4528_2020 

二、delete和drop

sql 复制代码
delete from dltb_350623_2021 where id<>158
sql 复制代码
DROP TABLE demo_contacts

三、三者比较

1、TRUNCATE TABLE 通过释放存储表数据所用的数据页来删除数据,并且只在事务日志中记录页的释放。DELETE 语句每次删除一行,并在事务日志中为所删除的每行记录一项。

使用TRUNCATE删除后,postgre的占用空间将被释放:

2、truncate与drop是DDL语句,执行后无法回滚;delete是DML语句,可回滚。

3、truncate只能作用于表;delete,drop可作用于表、视图等。

4、truncate会清空表中的所有行,且不能带where,但表结构及其约束、索引等保持不变;drop会删除表的结构及其所依赖的约束、索引等。

5、truncate会重置表的自增值;delete不会。

6、truncate不会激活与表有关的删除触发器;delete可以。

7、truncate后会使表和索引所占用的空间会恢复到初始大小;delete操作不会减少表或索引所占用的空间,drop语句将表所占用的空间全释放掉。

相关推荐
霖霖总总16 分钟前
[Redis小技巧27]Redis Cluster 全景指南:Gossip 协议、故障转移与生产避坑实战
数据库·redis·缓存
haoly198920 分钟前
数据库原理-外部归并排序-习题1
数据库·外部排序
indexsunny21 分钟前
互联网大厂Java面试:从Spring Boot到微服务的逐步挑战
java·数据库·spring boot·redis·微服务·面试·电商
sqyno1sky24 分钟前
游戏与图形界面(GUI)
jvm·数据库·python
2501_9454235438 分钟前
持续集成/持续部署(CI/CD) for Python
jvm·数据库·python
m0_6214385238 分钟前
用Python实现自动化的Web测试(Selenium)
jvm·数据库·python
hua8722239 分钟前
Redis 设置密码无效问题解决
数据库·redis·缓存
123过去1 小时前
mdb-sql使用教程
linux·网络·数据库·sql
2301_804215411 小时前
Python多线程与多进程:如何选择?(GIL全局解释器锁详解)
jvm·数据库·python
2301_793804691 小时前
Python单元测试(unittest)实战指南
jvm·数据库·python