Welcome 微信登录

首页 / 数据库 / MySQL / 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值将和上次的不连贯.(如果连不连贯无所谓建议用cache,因为时间就是金钱呀!跑题了!) 你只有了表和序列还不够,还需要一个触发器来执行它!代码如下: CREATE TRIGGER "触发器名称" BEFORE INSERT ON example FOR EACH ROW WHEN (new.id is null) begin         select emp_sequence.nextval into: new.id from dual; end; 打完收工!下面你就试试插入数据吧! 另一篇: 学oracle不久,在建表时发现这样一个问题,比如我现在创建一个表:student create table STUDENT (        ID NUMBER not null,        NAME VARCHAR2(20) default "男",        SEX VARCHAR2(4),        ADDRESS VARCHAR2(40),        MEMO VARCHAR2(60) ) 现在我想实现每插入一条数据,就让id自动增长1.在SQLSERVER中这个很好实现,但在oracle中我搞了半天,查了下资料发现要用到“序列(sequence)”,“触发器”的知识。首先,创建一个序列: create sequence STU minvalue 1 maxvalue 999999999999 start with 21 increment by 1 cache 20; 然后,给表student创建一个触发器: create or replace trigger stu_tr before insert on student for each row declare-- local variables here begin         select stu.nextval into :new.id from dual; end stu_tr; ******************************************************************************************************************************* 下面用一个例子来说明自增主键的创建: 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字段中*/ end; /*退出sqlplus行编辑*/ 4、提交 commit; 现在就完成了自增主键的设定,搞定!可以检测一下。 insert into dectuser(name,sex) values ("wang","女"); **************************************************************************************************** 总的来说,通过在insert操作之前,添加一个触发器,将序列的值放到了将要插入的数据的ID中。所以,需要 建表->建序列->建触发器 这样一个过程。我觉得有几个要注意的一是主键类型为 INT型比较好。二是触发器主题内容中,select...into 后面的冒号不能掉了。PostgreSQL 数据库性能提升的几个方面Oracle下特殊字符 &相关资讯      Oracle教程 
  • Oracle中纯数字的varchar2类型和  (07/29/2015 07:20:43)
  • Oracle教程:Oracle中查看DBLink密  (07/29/2015 07:16:55)
  • [Oracle] SQL*Loader 详细使用教程  (08/11/2013 21:30:36)
  • Oracle教程:Oracle中kill死锁进程  (07/29/2015 07:18:28)
  • Oracle教程:ORA-25153 临时表空间  (07/29/2015 07:13:37)
  • Oracle教程之管理安全和资源  (04/08/2013 11:39:32)
本文评论 查看全部评论 (0)
表情: 姓名: 字数