Oracle 主键自增

以前,用 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.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值