时间:2021-07-01 10:21:17 帮助过:7人阅读
id | key1 | key2
1 | k1 | k2
2)Oracle没有这个”auto_increment”属性,所以它没法像MySQL般在表内定义自增主键。 但是,Oracle里的序列(SEQUENCE),可间接实现自增主键的作用。 序列(Sequence),又叫序列生成器,用于提供一系列的数字,开发人员使用序列生成唯一键。每次访问序列,序列按照一定的规律增加或者减少。 序列的定义存储在SYSTEM表空间中,序列不像表,它不会占用磁盘空间。 序列独立于事务,每次事务的提交和回滚都不会影响序列。 创建的方法及参数说明如下,想了解更多,可以具体查一下oracle database sequence的说明:
- 1 CREATE SEQUENCE SEQNAME //序列名字
- 2 INCREMENT BY 1 //每次自增1, 也可写非0的任何整数,表示自增,或自减
- 3 START WITH 1 //以该值开始自增或自减
- 4 MAXVALUE 1.0E20 //最大值;设置NOMAXVALUE表示无最大值
- 5 MINVALUE 1 //最小值;设置NOMINVALUE表示无最大值
- 6 CYCLE or NOCYCLE //设置到最大值后是否循环;
- 7 CACHE 20 //指定可以缓存 20 个值在内存里;如果设置不缓存序列,则写NOCACHE
- 8 ORDER or NOORDER //设置是否按照请求的顺序产生序列
没有auto_increment属性了。 插入时实现自增主键,先创建序列:
- 1 CREATE TABLE Demo
- 2 (
- 3 id INT NOT NULL PRIMARY KEY,
- 4 key1 VARCHAR2(40) NULL,
- 5 key2 VARCHAR2(40) NULL
- 6 );
- 1 CREATE SEQUENCE SEQ
- 2 INCREMENT BY 1
- 3 START WITH 1
- 4 MAXVALUE 1.0E20
- 5 MINVALUE 1
- 6 NOCYCLE
- 7 CACHE 20
- 8 NOORDER
2、创建自动增长序列
- 1 drop table dectuser;
- 2 create table dectuser(
- 3 userid integer primary key, /*主键*/
- 4 name varchar2(20),
- 5 sex varchar2(2)
- 6 );
3、创建触发器
- 1 drop sequence dectuser_tb_seq;
- 2 create sequence dectuser_tb_seq minvalue 1 maxvalue 99999999
- 3 increment by 1
- 4 start with 1; /*步长为1*/
- 1 create or replace trigger dectuser_tb_tri
- 2 before insert on dectuser /*触发条件:当向表dectuser执行插入操作时触发此触发器*/
- 3 for each row /*对每一行都检测是否触发*/
- 4 begin /*触发器开始*/
- 5 select dectuser_tb_seq.nextval into :new.userid from dual;
- 6 /*触发器主题内容,即触发后执行的动作,在此是取得序列dectuser_tb_seq的下一个值插入到表dectuser中的userid字段中*/
- 7 end;
- 8 /
提示“已创建一行”,表示成功。 上述示例的代码,是直接引用他人的文章内容;原贴在http://shanxmxj.javaeye.com/blog/948739 自己试过此方法,但对select into感觉还是有些地方理解得不好。
- 1 insert into dectuser(name,sex) values (‘feng‘,‘男);
- 2 commit; /*提交*/
oracle 实现 自增主键功能
标签:gpo 缓存 磁盘空间 参数 star bsp 触发器 article span