• 【oracle】oracle数据库建立序列、使用序列实现主键自增


    2.建立序列

    -- Create sequence 
    create sequence SEQ_SHIP_IMAGE
    minvalue 20
    maxvalue 999999999999999999
    start with 40
    increment by 1
    cache 20;

    使用序列:

    SELECT SEQ_SHIP_IMAGE.Nextval from dual;
    insert into ship_image (id,img_path,remark,ship_id) values (SEQ_SHIP_IMAGE.Nextval,'ship3.jpg','8','8');

    或者

    <!-- 对应userDao中的insertUser方法,  -->
       <insert id="insertUser" parameterType="com.dy.entity.User">
            <!-- oracle等不支持id自增长的,可根据其id生成策略,先获取id       
            <selectKey resultType="int" order="BEFORE" keyProperty="id">
                  select seq_user_id.nextval as id from dual
            </selectKey>        
            -->   
               insert into user(id, name, password, age, deleteFlag) 
                   values(#{id}, #{name}, #{password}, #{age}, #{deleteFlag})
       </insert>



    
    

    所谓序列,在oracle中就是一个对象,这个对象用来提供一个有序的数据列,这个有序的数据列的值都不重复。

    1.序列可以自动生成唯一值

    2.是一个可以被共享的对象

    3.典型的用来生成主键值的一个对象

    4.可以替代应用程序代码

    5.当sequence的值存放在缓存中时可以提高访问效率。

    创建序列语法:

    CREATE SEQUENCE name

    [INCREMENT BY n]

    [START WITH n]              

    [{MAXVALUE n | NOMAXVALUE}]

    [{MINVALUE n | NOMINVALUE}]

    [{CYCLE | NOCYCLE}]

    [{CACHE n | NOCACHE}]

    note:

    1.increment by n:表明值每次增长n(步长)

    2.start with n: 从n开始

    3.{MAXVALUE n | NOMAXVALUE}: 设置最大值

    4.{MINVALUE n | NOMINVALUE}: 设置最小值,start with不能小于最小值。

    5.CYCLE | NOCYCLE          : 是否循环,建议不使用

    6.CACHE n | NOCACHE    : 是否启用缓存。

    例如:

    create sequence emp_id_seq

    start with 1

    increment by 1

    nomaxvalue

    nominvalue

    nocycle

    nocache;

    note:可以通过数据字典user_sequences查看当前用户所拥有的序列信息。

    例如:

    select sequence_name,min_value,max_value,last_number

    from user_sequences

    where sequence_name = 'EMP_ID_SEQ';

    序列的属性(伪列):

    1.nextval : 返回下一个可用的序列值。

    就算是被不同的用户调用,每次也返回一个唯一的值。

    2.currval :获取序列当前的值。

    在currval调用之前,必须保证nextval已经获取过一次值。

    使用sequence:

    例如:

    1.向表中插入数据

    insert into emp values(emp_id_seq.nextval);

    2.查看序列的当前值

    select emp_id_seq.currval from dual;

    3.获取序列的下一个值。

    select emp_id_seq.nextval from dual;

    缓存:

    使用缓存可以提高sequence的访问效率

    修改sequence:

    ALTER SEQUENCE name

    [INCREMENT BY n]      

    [{MAXVALUE n | NOMAXVALUE}]

    [{MINVALUE n | NOMINVALUE}]

    [{CYCLE | NOCYCLE}]

    [{CACHE n | NOCACHE}]

    note:

    1.必须是序列的拥有者,或者具有alter权限

    2.修改后的序列,只对之后的值起作用。

    3.不能修改start with,如果想改,只能删除,重新创建,启动。

    删除sequence:

    drop sequence seq_name;

    例如:

    drop sequence emp_id_seq;

  • 相关阅读:
    Row_Number 分页
    获取分组前5条数据
    sqlserver数据库学习
    改变电脑背景颜色保护视力
    问题集锦
    修改sqlserver自动编号的当前列值
    datatable数据批量倒入数据库
    sqlserver case
    空连接的写法
    遍历日志文件并打印
  • 原文地址:https://www.cnblogs.com/CESC4/p/7304941.html
Copyright © 2020-2023  润新知