码迷,mamicode.com
首页 > 数据库 > 详细

Oracle实现主键自增长

时间:2015-08-26 20:42:28      阅读:203      评论:0      收藏:0      [点我收藏+]

标签:

  1. MySql中在字段定义后面使用 AUTO_INCREMENT 属性实现自增长,Oracle如何实现主键自增长?

    1. 建表:

    2. create table users(
        userId number(10) not null,
        username varchar2(30) not null,
        birthday date default null,
        sex char(1) default 1 check (sex in (0, 1)),
        address varchar2(200) not null,
        detail varchar2(1000) default ‘no detail‘,
        socre number(4,2) default null,
        primary key (userId));
      
      /*
      --添加注释
      -- comment on table users is ‘用户表‘;
      -- comment on column users.userId is ‘用户编号‘;
      -- comment on column users.userId is ‘0: female 1: male‘;
      --修改表中字段的默认值
        alter table users modify (detail varchar2(1000) default (‘no detail‘));
        alter table users modify (sex char(1) default 1 check (sex in (0, 1)));
      -- 
      */
    3. 创建序列Sequence:

    4. /*
      --创建序列Sequence
      create sequence seq_userId
      minvalue 100100      --最小值
      nomaxvalue      --不设置最大值(由机器决定),或 根据表字段的值范围设置 maxvalue
      start with 100100    --从1开始计数,数值可变
      increment by 2  --每次加1,数值可变
      nocycle         --一直累加,不循环
      nocache         --不建缓冲区,如果建立cache那么系统将自动读取cache值 个seq,这样会加快运行速度;如果当机或oracle死了,那么下次读取的seq值将不连贯
      */
      
      create sequence seq_userId minvalue 100100 maxvalue 9999999999 start with 100100 increment by 1;
    5. 创建一个触发器来触发事件:每次insert操作时,自动生成一个sequence。

    6. --创建触发器
      create or replace trigger tg_insertUser
      before insert on users for each row when (new.userId is null)
      begin
        select seq_userId.Nextval into:new.userId from dual;
      end;
      
      --测试:
      insert into users (username, birthday, sex, address, socre) values (‘Oracle‘, to_date(‘1991-08-25 19:55:45‘, ‘yyyy-mm-dd hh24:mi:ss‘), 1, ‘ShangHai‘, 99.50);

Oracle实现主键自增长

标签:

原文地址:http://my.oschina.net/u/1757476/blog/497420

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!