SQL - 优雅复制树结构

需求:

复制树形结构数据


问题描述

老的做法:将数据去读到内存中,修改部分数据,然后将数据插入到数据库;

问题:

  • 如果有大量的数据,产生多次IO交互
  • 如果在一次读取所有的数据,分批插入,有可能把应用内存打爆;

解决方案:

使用 insert select 的语法,直接在数据库中进行复制操作,变免多个io和内存消耗

一、前置条件

需要增加copyId字段,记录被父子的数据id,用来协助更新父子关系

二、 复制数据

注意:pgsql 使用uuid需要先创建“uuid-ossp”函数

create extensionifnotexists"uuid-ossp";
INSERT INTO sys_gdc_sqlconf ( ID, pid, copyid ) 
SELECT
uuid_generate_v4(),
pid,
seq,
ID 
FROM
    sys_gdc_sqlconf

三、更新父子关系

UPDATE 
sys_gdc_sqlconf t1 
SET pid = t2.ID 
FROM
    sys_gdc_sqlconf t2 
WHERE
    t1.pid = t2.copyid

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
SQL(Structured Query Language)是结构化查询语言的缩写,是一种用于管理和操作关系型数据库的语言。精通SQL意味着熟练使用SQL语句进行数据查询、插入、更新和删除等操作,能够高效地处理数据库中的数据。 首先,SQL是一种声明性语言,用户只需描述要求的结果,而不需要指定具体的实现步骤。SQL语句根据一定的语法规则进行书写,通常包括关键字、函数、运算符、表名和字段名等。 结构化查询语言可以用于执行各种数据库操作,包括: 1. 数据查询:使用SELECT语句从一个或多个表中检索数据,可以使用条件、排序、分组等对结果进行限制和筛选。 2. 数据插入:使用INSERT INTO语句将数据插入到表中指定的列中。 3. 数据更新:使用UPDATE语句更新表中数据,可以指定更新哪些列、更新的条件和新的值。 4. 数据删除:使用DELETE FROM语句从表中删除数据,可以根据条件删除指定数据SQL还支持数据的合并、拆分和重新组合等操作。通过使用JOIN语句,可以在不同的表之间建立关联,从而实现多表查询。同时,SQL还提供了聚合函数(如SUM、AVG、COUNT等)用于计算和统计数据。 精通SQL还需要掌握SQL的优化技巧,以提高查询的效率。这包括合理设计数据表的结构,创建索引以提高查询速度,避免使用子查询等效率较低的操作。 总之,精通SQL是一个数据库工作者必备的技能。只有掌握SQL语言的各种特性和用法,才能高效地管理和操纵数据库中的数据

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值