SQL语句之DELETE实战
2023年7月12日
目 录
1. DELETE FROM 语句 1
1.1. 创建测试表,插入数据 1
1.2. 删除指定数据 1
1.3. 清空表 1
1.4. 删除ID=1的行 2
1.5. 在指定条件下批量删除 2
1.6. 返回删除数据 2
1.7. Truncate方式删表 2
1.8. DROP 方式删除 2
2. DELETE 和drop 和truncate的区别 2
DELETE FROM 语句
创建测试表,插入数据
删除指定数据
使用 DELETE 语句来删除 PostgreSQL 表中的数据,可以删除一行也可以同时删除多行。语法:DELETE FROM table_name WHERE [condition];
如果没有指定 WHERE 子句,PostgreSQL 表中的所有记录将被删除。通常我们需要在 WHERE 子句中指定条件来删除对应的记录,条件语句可以使用 AND 或 OR 运算符来指定一个或多个。执行删除后输出说明:
DELETE count ---count是被删除行的数目。
清空表
删除ID=1的行
在指定条件下批量删除
返回删除数据
Truncate方式删表
删除数据的其他方式TRUNCATE table_name;
TRUNCATE可以清空一个表或者一组表,和不带条件DELETE执行效果相同,不过它更快,因为它没有实际扫描表。此外,它会立刻回收磁盘空间, 而不是要求一个后续的VACUUM操作。在大表上 它最有用。
DROP 方式删除
DROP TABLE是移除一个表
DELETE 和drop 和truncate的区别
delete是DML,执行delete操作时(删除一行数据),可根据条件删除表中满足条件的数据,如果不指定where子句,那么删除表中所有记录,并且同时将删除操作记录在redo和undo表空间中以便进行回滚(rollback)和重做操作。需要手动提交(commit)操作才能生效,可以通过rollback撤消操作。delete语句不影响表所占用的extent,高水线(high watermark)保持原位置不变。
truncate是DDL,会删除表中所有记录,并且将重新设置高水线和所有的索引,缺省情况下将空间释放到minextents个extent,除非使用reuse storage。truncate会隐式提交,不需要commit提交,不会记录日志,所以执行速度很快,不能回滚,不会触发触发器。truncate只能作用于表,不能作用于视图,不能作用于带有外键的表,不能用于参与了索引视图的表。truncate相当于重新建表,数据库表属性信息同样会更新,这个表和索引所占用的空间会恢复到初始大小。
drop是DDL,不需要commit提交,所以执行速度很快,不能回滚,不会触发触发器,会删除表的结构所依赖的约束,触发器,索引,依赖于该表的存储过程/函数将保留,但是变为invalid状态。drop语句删除表结构及所有数据,并将表所占用的空间全部释放。




