Oracle使用序列和触发器设置自增字段

一、创建一张工作表
例:
create table tv(ID NUMBER primary key,TVNAME VARCHAR(16),ISPASS NUMBER);
 
二、先创建一个序列
create sequence [序列名]
minvalue 1 —— 最小值
nomaxvalue —— 不设置最大值
start with 1 —— 从1开始计数
increment by 1 —— 每次加1个
nocycle —— 一直累加,不循环
nocache; —— 不建缓冲区
 
例:
create sequence seq_tv start with 1 increment by 1;
 
三、创建触发器
CREATE OR REPLACE TRIGGER [触发器名] BEFORE
INSERT ON [表名] FOR EACH ROW WHEN
(new.id is null) --只有在id为空时,启动该触发器生成id号
begin
select [序列名].nextval into :new.id from dual;
end;
 
例:
CREATE OR REPLACE TRIGGER tiger_TV BEFORE INSERT ON TV FOR EACH ROW WHEN (new.id is null or NEW.ID = 0)
begin select seq_tv .nextval into :new.id from dual;end;
备注:into :new.id之间的冒号需要挨着new.id,不然不生效
 
四、插入数据时不用插入ID,只插入其他数据,会自动增加ID列的值
例:
insert into TV (TVNAME,ISPASS) values ('1999',1);
 
 
备注:以上方法试了可行,只需要把以上四个例子依次在PL/SQL中执行即可。网上有说在EntityFramework使用自增时,在需要自增的字段上增加[DatabaseGenerated(DatabaseGeneratedOption.Identity)],我试过了不行,在Model1.edmx模型上选择表中的ID,设置ID的属性StoreGeneratedPattern为Identity,试了多次,依旧不行,有试过此方法的希望说明一下注意事项!谢谢!
 

posted @ 2020-11-25 13:58  昨天忆  阅读(467)  评论(0编辑  收藏  举报