oracle主键增长方式,oracle 主键从增长设置

oracle和mysql不同。没有自增长字段auto_increment,可以通过序列和行触发器实现

1、建立数据库测试表

CREATE TABLE TEST(

ID NUMBER(12) PRIMARY KEY,

NAME VARCHAR2(20)

);

2、创建自增长序列

CREATE SEQUENCE test_seq

INCREMENT BY 1

START WITH 1 --从1开始

NOMAXVALUE --不设最大值

NOCYCLE --不循环

NOCACHE;

3、创建触发器

CREATE TRIGGER increase_test

BEFORE INSERT --

ON TEST

FOR EACH ROW

BEGIN

SELECT test_seq.Nextval

INTO:NEW.ID FROM DUAL;

END;

定义受到影响的各行触发器.这些触发器称为行触发器

行触发器的定义方式与语句触发器类似,但是有以下两个例外

1、行触发器要在定义的触发语句中包含for each row子句,还可以包含referencing语句

2、在before...for each row触发器中,可以引用受到影响的行值

在行触发器中,用户能够访问受到影响的行值。通过引用具有相关名称的列,即可以获取语句执行前的值和语句执行后的值。前映象(before image)的默认名称是:old,后映象(after image)的默认名称是:new

在insert触发器中,只可以使用:new值。由于以前没有存在这些行,所以不能够有:old.与此相反,在delete触发器中,则没有:new,只有:old, update触发器具有前映象:old和后映象:new

4、测试数据

INSERT INTO TEST(NAME) VALUES('JASON');

INSERT INTO TEST(ID,NAME) VALUES('8888','MARRY');

INSERT INTO TEST(NAME) VALUES('LISA');

然后提交 commit;

5、查看表数据

ID NAME

11 JASON

22 MARRY

3 3 LISA

说明:示例引用了:new.ID的值,并且把test_seq.nextval的值直接赋予:new.ID,这样,无论是否为ID列提供值,这种技术都使得该列取自test_seq.nextval

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值