• 售前

  • 售后

热门帖子
入门百科

pgsql添加自增序列、设置表某个字段自增操纵

[复制链接]
lang3344 显示全部楼层 发表于 2021-10-26 12:43:51 |阅读模式 打印 上一主题 下一主题
添加自增序列
  1. CREATE SEQUENCE 表名_id_seq
  2. START WITH 1
  3. INCREMENT BY 1
  4. NO MINVALUE
  5. NO MAXVALUE
  6. CACHE 1;
复制代码
设置表某个字段自增
  1. alter table表名 alter column id set default nextval(‘表名_id_seq');
复制代码
从当前最大id依次递增
  1. select setval(‘表名_id_seq',(select max(id) from 同一个表名));
复制代码
大写字符的表需要加双引号。比方:
  1. select setval('“表名_id_seq”',(select max(id) from “表名”));
复制代码
增补:PostgreSQL中设置表中某列值自增或循环
在postgresql中,设置已存在的某列(num)值自增,可以用以下方法:
  1. //将表tb按name排序,利用row_number() over()查询序号并将该列命名为rownum,创建新表tb1并将结果保存到该表中
  2. create table tb1 as (select *, row_number() over(order by name) as rownum from tb);
  3. //根据两张表共同的字段name,将tb1中rownum对应值更新到tb中num中
  4. update tb set num=(select tb1.rownum from tb1 where tb.name = tb1.name);
  5. //判断表tb1的存在并删除表
  6. drop table if exists tb1;
复制代码
在postgresql中,循环设置已存在的某列(num)值为0-9,可以用以下方法:
  1. //将表tb按name排序,利用row_number() over()查询序号并将该列命名为rownum,创建新表tb1并将结果保存到该表中
  2. create table tb1 as (select *, row_number() over(order by name) as rownum from tb);
  3. //根据两张表共同的字段name,将tb1中rownum对应值更新到tb中num中,由于为0-9循环自增,则%10
  4. update tb set num=(select tb1.rownum from tb1 where tb.name = tb1.name) % 10;
  5. //判断表tb1的存在并删除表
  6. drop table if exists tb1;
复制代码
其它:附录一个postgresql循环的写法(与上文无关)
  1. do $$
  2. declare
  3. v_idx integer :=0;
  4. begin
  5. while v_idx < 10 loop
  6. update tb set num = v_idx;
  7. v_idx = v_idx + 1;
  8. end loop;
  9. end $$;
复制代码
以上为个人履历,盼望能给各人一个参考,也盼望各人多多支持草根技能分享。如有错误或未思量完全的地方,望不吝赐教。

帖子地址: 

回复

使用道具 举报

分享
推广
火星云矿 | 预约S19Pro,享500抵1000!
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

草根技术分享(草根吧)是全球知名中文IT技术交流平台,创建于2021年,包含原创博客、精品问答、职业培训、技术社区、资源下载等产品服务,提供原创、优质、完整内容的专业IT技术开发社区。
  • 官方手机版

  • 微信公众号

  • 商务合作