1)创建实验表并初始化数据
文章插图
2)TRUNCATE TABLE执行成功
文章插图
3)查看执行结果
文章插图
4、示例2以下示例演示TRUNCATE命令的删除分区表数据:
--创建列表分区(LIST)DROP TABLE IF EXISTS orders;CREATE TABLE orders (id INT PRIMARY KEY,customer_id INT,order_date DATE,product_id INT,quantity INT) PARTITION BY LIST (customer_id) (PARTITION p1 VALUES (100),PARTITION p2 VALUES (200),PARTITION p3 VALUES (300),PARTITION p4 VALUES (400),PARTITION p5 VALUES (500));--插入测试数据INSERT INTO orders(id,customer_id,order_date,product_id,quantity)VALUES(1001,100,date'20230822',1,10);INSERT INTO orders(id,customer_id,order_date,product_id,quantity)VALUES(1002,100,date'20230822',2,20);INSERT INTO orders(id,customer_id,order_date,product_id,quantity)VALUES(1003,100,date'20230822',3,30);INSERT INTO orders(id,customer_id,order_date,product_id,quantity)VALUES(1004,200,date'20230822',4,40);--查看分区p1、p2的数据SELECT * FROM orders WHERE customer_id IN (100,200);--或--根据分区名称查询SELECT * FROM orders PARTITION(p2);--清空分区p1 。ALTER TABLE orders TRUNCATE PARTITION p1;--或者--清空分区p2=200 。ALTER TABLE orders TRUNCATE PARTITION for (200);--查看分区p1、p2的数据SELECT * FROM orders WHERE customer_id IN (100,200);
1)创建实验表并初始化文章插图
2)根据分区进行删数据
文章插图
五、GaussDB的DELETE命令及示例1、功能描述从指定的表里删除满足WHERE子句的行 。如果WHERE子句不存在,将删除表中所有行,结果只保留表结构 。
2、注意事项
- 不支持DELETE语句中使用LIMIT 。应使用WHERE条件明确需要更新的目标行 。
- 不支持在单条SQL语句中,对多个表进行删除 。
- DELETE语句中必须有WHERE子句,避免全表扫描 。
- DELETE语句中禁止不应使用ORDER BY、GROUP BY子句,避免不必要的排序 。
- 如果需要清空一张表,建议使用TRUNCATE , 而不是DELETE 。
- TRUNCATE会创建新的物理文件,并在事务结束时将原文件物理删除,清空磁盘空间 。而DELETE会将表中数据进行标记,直到VACCUUM FULL阶段才会真正清理磁盘空间 。
- DELETE有主键或索引的表 , WHERE条件应结合主键或索引,提高执行效率 。
- DELETE 语句每次删除一行 , 并在事务日志中为所删除的每行记录一项 。
- 如果想保留标识计数值,请改用 DELETE
DELETE FROM table_name [WHERE condition];
参数:table_name:需要删除数据的Table名称 。condition:用于判断哪些行需要被删除 。4、示例复用前面的实验表:
1)删除orders表中customer_id <200的所有数据:
DELETE FROM orders WHERE customer_id <200;
文章插图
六、应用场景
- 需要根据一定的业务条件删除数据时、且数据量、性能可控的情况下,可以考虑使用 DELETE 。
- 需要删除大批量数据时,同时要求速度快 , 效率高并且无需撤销时,可以使用 TRUNCATE 。
- 在企业级开发中 , 实际上都是进行逻辑删除(将数据进行“删除标识”处理)、而并不进行物理上的删除 。
- 在实际生产环境中,一般情况下删除业务处理(过渡表)中的数据 。
- 在实际企业开发、维护过程中,不管使用 DELETE、TRUNCATE还是DROP命令前,都要考虑数据的备份 。
推荐阅读
- 五分钟让你搞懂 Http 和 Https 协议的区别是什么?
- 使用FastAPI部署YOLO模型的步骤
- 八种在 React 中实现条件渲染技术的方法
- MySQL:为什么查询一行数据也要花费上百毫秒
- 七个鲜为人知的VS Code快捷键
- Kubernetes 的调试功能 ,别慌:debug 不行,还有superdebug
- 构建强大REST API的十个最佳实践
- 前端请求到后端API的中间件流程解析
- OpenTelemetry属性命名的五个最佳实践
- MySQL:逃不掉的锁事,间隙锁