Oracle怎么在建表时让主键自动递增

Oracle怎么在建表时让主键自动递增呢?

首先我们创建一个测试用的表(这里就不讲建表相关的知识了)。

create table by_admin(
       admin_id  int primary key ,
       admin_username varchar(100) not null,
       admin_password varchar(100) not null,
       admin_name varchar(100) not null,
       admin_sex varchar(100) check(admin_sex in (m,f)),
       admin_tel varchar(100) not null,
       admin_email varchar(100) not null,
       admin_idcard varchar(100) not null
       
);

Oracle与MySql主键递增的加法不同,Oracle需要在建好表以后给该表创建一个序列。

--创建序列格式
create sequence 表名_主键名_seq start with 1 increment by 1;
--创建序列
create sequence by_admin_admin_id_seq start with 1 increment by 1;

建好序列以后可以查看该序列,可以更改(需要管理员权限)。

--查看并更改序列
select a.*,rowid  from user_sequences a;

有了序列之后还必须要有一个触发器来触发,比如说:当主键为空时,系统自动取我们设置的序列值填进去。

--创建触发器
create or replace trigger by_admin_trigger
       before insert on by_admin
       for each row
         when(new.admin_id is null)
         begin
           select by_admin_admin_id_seq.nextval into:new.admin_id from dual;
         end;

建好触发器以后可以查看该触发器,可以更改(需要管理员权限)。

--查看触发器
select a.*,rowid from user_triggers;

最后我们插入数据来检测我们的序列。

--插入测试数据
insert into by_admin 
values(,a,b,c,m,e,f,g);
--查看测试结果
select a.*,rowid from by_admin a;

总结就是:建好表——>创建序列——>创建触发器——>大功告成。

经验分享 程序员 微信小程序 职场和发展