天天看点

oracle主键自增,ORA-00001: unique constraint

以前公司一直用的是mysql,换公司以后改用oracle了,虽然大同小异,但是也算刚接触oracle

由于在oracle中主键自增比mysql麻烦一点,需要创建触发器才可以,接下来就是让oracle主键自增的过程

1;/第一步:创建表格/

create table XTY_DOMAIN_CDN_IP_201909(

id int primary key, --主键,自增长

url varchar(255),

cname varchar(255),

oper varchar(255),

cdn varchar(255),

ip varchar(255),

nameq varchar(255),

domaain varchar(255)

);

2;/第二步:建立自定义的序列/

CREATE SEQUENCE user_sequence

increment by 1 – 每次加几个

start with 1 – 从1开始计数

nomaxvalue – 不设置最大值

nocycle – 一直累加,不循环

nocache

3;/第三步:建立触发器/

create trigger mem_trig before

insert on XTY_DOMAIN_CDN_IP_201909 for each row when (new.id is null)

begin

select user_sequence.nextval into:new.id from dual;

end;

4;补充,其中XTY_DOMAIN_CDN_IP_201909是表名

5;删除序列的语法

drop sequence 序列命;

6;查看所有的序列号在什么位置

select * from user_sequences

7:oracle插入数据有时候会报错“ ORA-00001: unique constraint”,唯一约束错误。可能原因之一就是序列设置了最大值

解决办法先执行第六步查看序列号在什么位置,执行第五步删除原有的序列,执行第二步重新创建序列

8:补充触发器

8.1触发器名:t_fixbb_overview

8.2表名:T_FIX_BROADBAND_OVERVIEW

8.3序列名:SEQ_T_FIX_BROADBAND_OVERVIEW

8.4表里面的时间字段,入库时触发器自动添加时间:db_time

create or replace TRIGGER t_fixbb_overview

BEFORE INSERT ON T_FIX_BROADBAND_OVERVIEW

FOR EACH ROW

DECLARE

BEGIN

IF :new.id is null

THEN

select SEQ_T_FIX_BROADBAND_OVERVIEW.nextval into :new.id from dual;

END IF;

select sysdate into :new.db_time from dual;

END;