zoukankan      html  css  js  c++  java
  • Oracle创建自动增长列

    前言:

      Oracle中不像SQL Server在创建表的时候使用identity(1001,1)来创建自动增长列,而是需要结合序列(Sequences)和触发器(Triggers)来实现

    创建测试表

    create table tbluser
    (
         ID          NUMBER(10) not null,
         NAME        VARCHAR2(50) not null, 
         SEX         VARCHAR2(2) not null, 
         AGE         NUMBER NOT NULL,
         DESCRIPTION VARCHAR2(1000), 
         PRIMARY KEY("ID") 
    )        

    创建一个序列,从10000开始计数,增量为1

    create sequence USER_ID
    minvalue 1
    maxvalue 9999999999999999999999999999
    start with 10000 --从10000开始生成序列
    increment by 1 --增量为1
    cache 20; --预存20个序列值在内存中,这样可以提高访问序列的速度

    为user表创建一个before insert的触发器,在插入之前将表user的主键设置为上面的序列值

    CREATE OR REPLACE TRIGGER "USER_ID_TRIGGER" BEFORE
    INSERT ON tbluser FOR EACH ROW --一定要加上For each row,表示该触发器适应于每一条记录
    declare   
          mid number;   
    begin   
          select user_id.nextval into mid from dual; --user_id.nextval是获得上面定义的序列ORDER_ID的下一个值
          :new.id:=mid; --将得到的序列值赋给表user的主键id, 可以用":new"引用将要插入的一行数据
          
    --
    SELECT USER_ID.Nextval INTO :new.ID FROM dual; end;

    这样,当执行插入记录的时候,可以这样写

    insert into tbluser(name,sex,age,description)values('test','',20,'');

    Oracle会调用上面创建的触发器将序列值赋值给主键ID

    第二种方案:

    在建完序列后直接在插数据的时候在主键的地方直接使用user_id.nextval代替

  • 相关阅读:
    ajax请求先发后至问题处理
    Jquery 使用val时触发change事件
    let与var的几个主要区别
    正则表达式s字符匹配
    Ext.DateField设置Format无法提交数据
    swift基本示例
    div 中文会换行 英文不换行
    js 动画提示数据有变化
    为什么要写博客
    突然发现一个开源项目TXQR和我之前申请的一个专利挺像的
  • 原文地址:https://www.cnblogs.com/wuhanjackh/p/12218008.html
Copyright © 2011-2022 走看看