以前公司一直用的是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;