以前,用 SQL server,主键自增用 IDENTITY(x,x)即可,接触 Oracle 才知道不一样,在网上了解之后,Oracle 需要创建触发器才可以。
Oracle的自增约束步骤大概有3步:
1.创建表
2.创建序列sequence
3.设置触发器以应用sequence到表的主键
1、创建表
一般,都是设置 id 来作为主键。
create table information
(
user_id int primary key,--设定主键
user_name varchar(255),
user_age int,
user_address varchar(255),
user_marks number(2,1)
)
tablespace TF_SPACE;
2、创建序列sequence
序列(Sequence),又叫序列生成器,用于提供一系列的数字,开发人员使用序列生成唯一键。每次访问序列,序列按照一定的规律增加或者减少。
序列的定义存储在SYSTEM表空间中,序列不像表,它不会占用磁盘空间。序列独立于事务,每次事务的提交和回滚都不会影响序列。
创建的方法及参数说明如下:
CREATE SEQUENCE SEQNAME //序列名字
INCREMENT BY 1 //每次自增1, 也可写非0的任何整数,表示自增,或自减
START WITH 1 //以该值开始自增或自减
MAXVALUE 1.0E20 //最大值;设置NOMAXVALUE表示无最大值
MINVALUE 1 //最小值;设置NOMINVALUE表示无最大值
CYCLE or NOCYCLE //设置到最大值后是否循环;
CACHE 20 //指定可以缓存 20 个值在内存里;如果设置不缓存序列,则写NOCACHE
ORDER or NOORDER //设置是否按照请求的顺序产生序列
建立本张表要使用的序列
CREATE SEQUENCE user_sequence
increment by 1 //每次自增 1
start with 100 //从100开始计数
nomaxvalue //不设置最大值
nocycle //一直累加,不循环
nocache //设置不缓存序列
3、设置触发器以应用sequence到表的主键
create trigger mem_trig //触发器名字
before insert on tablename //触发条件:当向表执行插入操作时触发此触发器
for each row when (new.user_id is null) //对每一行都检测是否触发
begin
select user_sequence.nextval into:new.user_id from dual; //触发后执行的动作,在此是取得序列的下一个值插入到表中的id字段中
end;
现在就完成了主键的自动增长
注意:不要在 sys 登陆下,创建触发器,否则创建触发器时会报错,原因是所有的以sysdba登录的账户都不能创建触发器。
4、测试
向表中插入几行数据:
insert all
into INFORMATION values (null,'jackma',30,'shanghai',8.7)
into INFORMATION values (null,'linda',27,'beijing',9.8)
into INFORMATION values (null,'oldd',37,'shenzhen',9.7)
into INFORMATION values (null,'alan',44,'nanjing',9.3)
into INFORMATION values (null,'paul',56,'xi’an',8.5)
SELECT * FROM dual;
select * from INFORMATION;
结果如下:
这样,主键自增就做好了。
over.