zoukankan      html  css  js  c++  java
  • PostgreSQL 序列使用

    数据库中主键的生成一般是通过序列来生成,PG的序列知识主要罗列如下:

    如何找到序列的名称:用pgadmin打开当前所用数据库,在schemas->sequences下找到相关的序列,然后SELECTnextval('im_indicator_results_seq');查看当前的序列号,在去相关的表中查看已有的最大序列号,如:selectmax(result_id) from im_indicator_results;,最后设置当前序列号为最大序列号SELECTsetval('im_indicator_results_seq', 5288);

    方法a:直接在表中指定字段类型是 SERIAL 类型就一了

    CREATE TABLE person (   id   SERIAL,   name TEXT  );
    
    CREATE SEQUENCE person_id_seq; CREATE TABLE person ( id INT4 NOT NULL DEFAULT nextval('person_id_seq'), name TEXT ); SELECT currval('person_id_seq') ; SELECT nextval('person_id_seq') ; select last_value from person_id_seq; select setval(seq_name,new_seq_value);
       SELECT setval('foo', 42);    --下次nextval将返回43
    
    
        SELECT setval('foo', 42, false);   --下次nextval将返回42
    

    drop table table_name; 
    drop sequence seq_name;

    a.currval取得的是当前会话的序列值,在当前会话中该值不会因为其他会话取了nextval而变化。会变化的是全局的last_value值,并且当前会话中如果没有读过nextval值时直接读currval是会报错的。 
    b.对于序列是由建表时指定serial时创建时,删除该表的同时,对应的序列也会被删除。 
    c.表主键数据可以用跟表相关的序列,也可以用其他序列,但不推荐,只是PG默认它没错。 
    d.为使多用户并发下同一个序列取值不会重复,nextval是不会rollback的,不过可以使用setval重置

  • 相关阅读:
    CS academy Binary Flips(dp)
    [POJ 1637] Sightseeing tour(网络流)
    Codeforces 346D Robot Control(01BFS)
    BZOJ 2069: [POI2004]ZAW(Dijkstra + 二进制拆分)
    驱动之SPI,UART,I2C的介绍与应用20170118
    USB驱动之CDC类的介绍与应用20160905
    uCOS-II之移植20160823
    java之面向对象20160818
    Java之基础20160806
    Android之框架20160721
  • 原文地址:https://www.cnblogs.com/xmzzp/p/6284758.html
Copyright © 2011-2022 走看看