Oracle主键自增

在设置主键自增时有几种方法,今天介绍其中一种方法:sequence+trigger

1.创建表
create table tbl_card         --创建校园卡表
(
id int primary key,           --序号
card_num varchar2(20),        --校园卡号
card_holder varchar2(10),     --持卡人姓名
card_balance number           --校园卡余额
);
2.创建序列
create sequence cardID_seq --创建校园卡ID序列
start with 1               --序列从1开始
increment by 1             --每次增加1
minvalue 1                 --最小值为1
nomaxvalue                 --不设最大值
nocache                    --没有缓存
nocycle                    --一直累加不循环
3.创建触发器
create or replace trigger cardID_trigger   --创建校园卡ID触发器
before insert on tbl_card                  --在插入表之前
for each row                               --对于每一列
begin                                      --要做的操作
    select cardID_seq.nextval into :new.id from dual; --将下一个ID序列插入作为新的序号
end;
4.输入数据测试
insert into tbl_card (card_num,card_holder,card_balance)
values (1102015001,'翠花',75);
insert into tbl_card (card_num,card_holder,card_balance)
values (1102015002,'如花',122);
insert into tbl_card (card_num,card_holder,card_balance)
values (1102015003,'花花',46);
select * from tbl_card;
查询表结果

至此,主键自增实现。

遇到的问题

在创建触发器的时候报错
报错:权限不足

显示权限不足,原因是在创建用户时,没有赋予其创建触发器的权限,来到DOS界面输入:

sqlplus /nolog
conn as sysdba // 以管理员身份登录
grant create trigger(触发器) to baobao;
赋予用户创建触发器权限

回到Oracle再次执行就OK啦

相关概念
触发器(trigger)是一些过程,当发生一个特定的数据库事件时就执行这些过程,可以使用触发器扩充引用的完整性。

DML即数据操纵语言,用于让用户或程序员使用,实现对数据库中数据的操作。基本的数据操作分成两类四种:检索(查询)和更新(插入、删除、修改)。
DML触发器即由DML语句激发,其触发事件包括insert(插入)、update(更新)和delete(删除)。无论哪种触发事件,都能为每种触发事件创建before触发器和after触发器。如可以在表上建立一个before insert 语句,表示在insert事件发生之前采取行动。

cache缓存

如果指定cache值,Oracle就可以预先在内存里面放置一些Sequence,这样存取的快些。cache里面的取完后,Oracle自动再取一组到cache。使用cache或许会跳号, 比如数据库突然不正常down掉(shutdown abort),cache中的Sequence就会丢失。举个例子:比如你的sequence中cache 100,那当你sequence取到90时突然断电,那么在你重启数据库后,sequence的值将从101开始。

最后,还有另一种方法可以设置自增,以后讲到。
学以致用
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 第一步 第二步 创建主键seq 第三步 绑定触发
    不懂i_阅读 331评论 0 0
  • 1.1 基本结构 PL/SQL程序由三个块组成,即声明部分、执行部分、异常处理部分。 1.2 命名规则 1.3 记...
    慢清尘阅读 3,955评论 3 14
  • 范师傅提醒,表情表达不好,是不是图画的太小了。今天放大了画,果真不一样啊。只是油性笔涂色的时候有些晕染,用什么方法...
    柳成林888阅读 212评论 0 0
  • 别问我为什么知道这些,我看完了小说,而且目前而言,小说和电视剧契合度很高。除了老谭,书里的老谭可是个秃头大胖子,颜...
    岁月旅行阅读 781评论 0 1
  • 风景,令人愉快,心情舒畅。有一种风景却有另一番风味。他让我们享受了温暖的感觉。 ...
    期待关于我阅读 293评论 4 1