zoukankan      html  css  js  c++  java
  • oracle自增

    oracle中主键自增

    下面用一个例子来说明自增主键的创建:

    1、建用户数据表

          drop table dectuser;

          create table dectuser(

               userid integer primary key,  /*主键,自动增加*/

               name varchar2(20),

               sex varchar2(2)

               );2、创建自动增长序列

          drop sequence dectuser_tb_seq;

          create sequence dectuser_tb_seq minvalue 1 maxvalue 99999999

                   increment by 1

                   start with 1;   /*步长为1*/

    3、创建触发器

          create or replace trigger dectuser_tb_tri

              before insert on dectuser     /*触发条件:当向表dectuser执行插入操作时触发此触发器*/

              for each row                       /*对每一行都检测是否触发*/

              begin                                  /*触发器开始*/

                     select dectuser_tb_seq.nextval into :new.userid from dual;   /*触发器主题内容,即触发后执行的动作,在此是取得序列dectuser_tb_seq的下一个值插入到表dectuser中的userid字段中,注意:new.userid 是new.加上原表的主键*/

              end;

       

              /                                        /*退出sqlplus行编辑*/

    4、提交

          commit;

     

          现在就完成了自增主键的设定,搞定!可以检测一下。

          insert into dectuser(name,sex) values ('wang','女');

          提示“已创建一行”,表示成功。呵呵:D

    方法二:

     

     

    oracle中创建自增主键

    首先,创建一张表

    CREATE TABLE example(

    ID Number(4) NOT NULL PRIMARY KEY,

    NAME VARCHAR(25),

    PHONE VARCHAR(10),

    ADDRESS VARCHAR(50));

    然后,你需要一个自定义的sequence

    CREATE SEQUENCE emp_sequence

    INCREMENT BY 1 -- 每次加几个

    START WITH 1 -- 从1开始计数

    NOMAXVALUE -- 不设置最大值

    NOCYCLE -- 一直累加,不循环

    NOCACHE -- 不建缓冲区

    以上代码完成了一个序列(sequence)的建立过程,名称为emp_sequence,范围是从1开始到无限大(无限大的程度是由你机器决定的),nocycle 是决定不循环,如果你设置了最大值那么你可以用cycle 会使seq到最大之后循环.对于nocache顺便说一下如果你给出了cache值那么系统将自动读取你的cache值大小个seq

    ,这样在反复操作时会加快运行速度,但如果遭遇意外情况如当机了或oracle死了,则下次取出的seq值将和上次的不连贯

    书接上文,你只有了表和序列还不够,还需要一个触发器来执行它!代码如下:

    CREATE or replace TRIGGER "触发器名称" BEFORE

    INSERT ON example FOR EACH ROW WHEN (new.id is null)

    begin

    select emp_sequence.nextval into: new.id from dual;

    end;

    插入数据

    INSERT INTO example(Name,phone,address) Values('Cao','56498543','Heibei');

    =============================================================

    ORACLE SEQUENCE的简单介绍(自增长字段)-

  • 相关阅读:
    CentOS查看CPU信息、位数、多核信息
    Linux常用命令大全
    chmod命令详细用法
    tar命令的详细解释
    yum和rpm命令详解
    LeetCode 241. Different Ways to Add Parentheses
    LeetCode 139. Word Break
    LeetCode 201. Bitwise AND of Numbers Range
    LeetCode 486. Predict the Winner
    LeetCode 17. Letter Combinations of a Phone Number
  • 原文地址:https://www.cnblogs.com/zhoushengbing/p/3253089.html
Copyright © 2011-2022 走看看